Home | History | Annotate | Download | only in src
      1 /* ------------------------------------------------------------------
      2  * Copyright (C) 1998-2009 PacketVideo
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
     13  * express or implied.
     14  * See the License for the specific language governing permissions
     15  * and limitations under the License.
     16  * -------------------------------------------------------------------
     17  */
     18 #include "audio_only_test.h"
     19 
     20 
     21 void audio_only_test::test()
     22 {
     23     fprintf(fileoutput, "Start audio only test, proxy %d,SrcFormat:", iUseProxy);
     24 
     25     printFormatString(iAudSrcFormatType);
     26 
     27     fprintf(fileoutput, " SinkFormat:");
     28 
     29     printFormatString(iAudSinkFormatType);
     30 
     31     fprintf(fileoutput, "\n");
     32 
     33     int error = 0;
     34 
     35     scheduler = OsclExecScheduler::Current();
     36 
     37     this->AddToScheduler();
     38 
     39     init_mime_strings();
     40 
     41     if (start_async_test())
     42     {
     43         OSCL_TRY(error, scheduler->StartScheduler());
     44         if (error != 0)
     45         {
     46             test_is_true(false);
     47             OSCL_LEAVE(error);
     48         }
     49     }
     50 
     51     this->RemoveFromScheduler();
     52     test_is_true(iTestStatus);
     53 }
     54 
     55 
     56 void audio_only_test::Run()
     57 {
     58     if (terminal)
     59     {
     60         if (iUseProxy)
     61         {
     62             CPV2WayProxyFactory::DeleteTerminal(terminal);
     63         }
     64         else
     65         {
     66             CPV2WayEngineFactory::DeleteTerminal(terminal);
     67         }
     68         terminal = NULL;
     69     }
     70 
     71     if (timer)
     72     {
     73         delete timer;
     74         timer = NULL;
     75     }
     76 
     77     scheduler->StopScheduler();
     78 }
     79 
     80 void audio_only_test::DoCancel()
     81 {
     82 }
     83 
     84 
     85 void audio_only_test::HandleInformationalEvent(const PVAsyncInformationalEvent& aEvent)
     86 {
     87     int error = 0;
     88     switch (aEvent.GetEventType())
     89     {
     90         case PVT_INDICATION_OUTGOING_TRACK:
     91         {
     92             TPVChannelId *channel_id = (TPVChannelId *)(&aEvent.GetLocalBuffer()[4]);
     93             printf("Indication with logical channel #%d ", *channel_id);
     94             if (aEvent.GetLocalBuffer()[0] == PV_AUDIO && isFirstSink)
     95             {
     96                 isFirstSink = false;
     97                 iSelAudioSource = get_audio_source(iAudSrcFormatType);
     98                 if (iSelAudioSource != NULL)
     99                 {
    100                     OSCL_TRY(error, iAudioAddSourceId = terminal->AddDataSource(*channel_id, *iSelAudioSource));
    101                     printf("Audio");
    102                 }
    103             }
    104             else if (aEvent.GetLocalBuffer()[0] == PV_VIDEO)
    105             {
    106                 printf("Video");
    107             }
    108             else
    109             {
    110                 printf("unknown");
    111             }
    112             printf(" outgoing Track\n");
    113             break;
    114         }
    115 
    116         case PVT_INDICATION_INCOMING_TRACK:
    117         {
    118             TPVChannelId *channel_id = (TPVChannelId *)(&aEvent.GetLocalBuffer()[4]);
    119             printf("Indication with logical channel #%d ", *channel_id);
    120             if (aEvent.GetLocalBuffer()[0] == PV_AUDIO && isFirstSrc)
    121             {
    122                 isFirstSrc = false;
    123                 iSelAudioSink = get_audio_sink(iAudSinkFormatType);
    124                 if (iSelAudioSink != NULL)
    125                 {
    126                     OSCL_TRY(error, iAudioAddSinkId = terminal->AddDataSink(*channel_id, *iSelAudioSink));
    127                     printf("Audio");
    128                 }
    129             }
    130             else if (aEvent.GetLocalBuffer()[0] == PV_VIDEO)
    131             {
    132                 printf("Video");
    133             }
    134             else
    135             {
    136                 printf("unknown");
    137             }
    138             printf(" incoming Track\n");
    139             break;
    140         }
    141 
    142         case PVT_INDICATION_DISCONNECT:
    143             iAudioSourceAdded = false;
    144             iVideoSourceAdded = false;
    145             iAudioSinkAdded = false;
    146             iVideoSinkAdded = false;
    147             break;
    148 
    149         case PVT_INDICATION_CLOSE_TRACK:
    150             break;
    151 
    152         case PVT_INDICATION_INTERNAL_ERROR:
    153             break;
    154 
    155         default:
    156             break;
    157     }
    158 }
    159 
    160 void audio_only_test::ConnectSucceeded()
    161 {
    162 }
    163 
    164 void audio_only_test::ConnectFailed()
    165 {
    166     reset();
    167 }
    168 
    169 
    170 void audio_only_test::TimerCallback()
    171 {
    172     int error = 1;
    173     timer_elapsed = true;
    174     if (iSelAudioSource != NULL)
    175     {
    176         OSCL_TRY(error, iAudioRemoveSourceId = terminal->RemoveDataSource(*iSelAudioSource));
    177     }
    178     if (error)
    179     {
    180         iTestStatus &= false;
    181         disconnect();
    182     }
    183     else
    184     {
    185         error = 1;
    186         if (iSelAudioSink != NULL)
    187         {
    188             OSCL_TRY(error, iAudioRemoveSinkId = terminal->RemoveDataSink(*iSelAudioSink));
    189         }
    190         if (error)
    191         {
    192             iTestStatus &= false;
    193             disconnect();
    194         }
    195     }
    196 
    197 }
    198 
    199 
    200 bool audio_only_test::start_async_test()
    201 {
    202     timer = new engine_timer(this);
    203     if (timer == NULL)
    204     {
    205         iTestStatus &= false;
    206         return false;
    207     }
    208 
    209     iAudioSourceAdded = false;
    210     iAudioSinkAdded = false;
    211     isFirstSink = true;
    212     isFirstSrc = true;
    213 
    214     timer->AddToScheduler();
    215 
    216 
    217     return test_base::start_async_test();
    218 }
    219 
    220 
    221