Fix tune byte alignment

When reading data from the socket, one byte is read during tuning
and remaining data is read during playback. Since the same streamer
is used for reading data, there is an offset of 1 when tuning is
performed before playback. The extra byte is stored in a buffer
and prepended to the playback buffer.

Bug: 288170590
Test: atest VtsHalTvTunerTargetTest
Change-Id: Ie5d112dbc3c3e3bbb0bb07e60d15ddc26cacaf8c
diff --git a/tv/tuner/aidl/default/Frontend.cpp b/tv/tuner/aidl/default/Frontend.cpp
index 5cee3c7..1031604 100644
--- a/tv/tuner/aidl/default/Frontend.cpp
+++ b/tv/tuner/aidl/default/Frontend.cpp
@@ -188,6 +188,9 @@
     mCallback = nullptr;
     mIsLocked = false;
     mTuner = nullptr;
+    if (mTuneByteBuffer != nullptr) {
+        free(mTuneByteBuffer);
+    }
 }
 
 ::ndk::ScopedAStatus Frontend::close() {
@@ -246,11 +249,12 @@
     }
     mCallback->onEvent(FrontendEventType::LOCKED);
     mIsLocked = true;
+    mTuneByteBuffer = buf;
 }
 
 ::ndk::ScopedAStatus Frontend::tune(const FrontendSettings& in_settings) {
     if (mCallback == nullptr) {
-        ALOGW("[   WARN   ] Frontend callback is not set for tunin0g");
+        ALOGW("[   WARN   ] Frontend callback is not set for tuning");
         return ::ndk::ScopedAStatus::fromServiceSpecificError(
                 static_cast<int32_t>(Result::INVALID_STATE));
     }
@@ -298,7 +302,6 @@
         if (mIptvFrontendTuneThread.joinable()) {
             mIptvFrontendTuneThread.join();
         }
-        free(buf);
     }
 
     return ::ndk::ScopedAStatus::ok();