GenericSource: start/stop tracks correctly on selection

Change-Id: I10343151f930a4ab778a6d2574ab5165af2013ba
diff --git a/media/libmediaplayerservice/nuplayer/GenericSource.cpp b/media/libmediaplayerservice/nuplayer/GenericSource.cpp
index 4c6a59c..0b09f58 100644
--- a/media/libmediaplayerservice/nuplayer/GenericSource.cpp
+++ b/media/libmediaplayerservice/nuplayer/GenericSource.cpp
@@ -137,7 +137,6 @@
         }
 
         if (track != NULL) {
-            CHECK_EQ(track->start(), (status_t)OK);
             mSources.push(track);
             int64_t durationUs;
             if (meta->findInt64(kKeyDuration, &durationUs)) {
@@ -184,6 +183,7 @@
     ALOGI("start");
 
     if (mAudioTrack.mSource != NULL) {
+        CHECK_EQ(mAudioTrack.mSource->start(), (status_t)OK);
         mAudioTrack.mPackets =
             new AnotherPacketSource(mAudioTrack.mSource->getFormat());
 
@@ -191,6 +191,7 @@
     }
 
     if (mVideoTrack.mSource != NULL) {
+        CHECK_EQ(mVideoTrack.mSource->start(), (status_t)OK);
         mVideoTrack.mPackets =
             new AnotherPacketSource(mVideoTrack.mSource->getFormat());
 
@@ -255,7 +256,11 @@
           }
 
 
+          if (track->mSource != NULL) {
+              track->mSource->stop();
+          }
           track->mSource = source;
+          track->mSource->start();
           track->mIndex = trackIndex;
 
           status_t avail;
@@ -529,6 +534,7 @@
         if (track == NULL) {
             return INVALID_OPERATION;
         }
+        track->mSource->stop();
         track->mSource = NULL;
         track->mPackets->clear();
         return OK;
@@ -545,7 +551,11 @@
             return OK;
         }
         track->mIndex = trackIndex;
+        if (track->mSource != NULL) {
+            track->mSource->stop();
+        }
         track->mSource = mSources.itemAt(trackIndex);
+        track->mSource->start();
         if (track->mPackets == NULL) {
             track->mPackets = new AnotherPacketSource(track->mSource->getFormat());
         } else {