summaryrefslogtreecommitdiff
Diffstat
-rw-r--r--libTVaudio/audio/DTSHD_media_source.cpp15
1 files changed, 13 insertions, 2 deletions
diff --git a/libTVaudio/audio/DTSHD_media_source.cpp b/libTVaudio/audio/DTSHD_media_source.cpp
index 8127e1a..6945da3 100644
--- a/libTVaudio/audio/DTSHD_media_source.cpp
+++ b/libTVaudio/audio/DTSHD_media_source.cpp
@@ -201,7 +201,8 @@ status_t Dtshd_Media_Source::read(MediaBuffer **out, __unused const ReadOptions
unsigned char ptr_head2[IEC61937_DTS_HEAD_PTR -4] = { 0 };
int SyncFlag = 0;
int readedbytes = 0;
- if (MediaSourceRead_buffer(&ptr_head[0], 4) < 4) {
+ int i = 0 ;
+ if (MediaSourceRead_buffer(&ptr_head[0], 4) < 4) {
readedbytes = 4;
ALOGI("WARNING:read %d bytes failed [%s %d]!\n", readedbytes,
__FUNCTION__, __LINE__);
@@ -264,8 +265,11 @@ status_t Dtshd_Media_Source::read(MediaBuffer **out, __unused const ReadOptions
//ALOGI("mFrame_size:%d",mFrame_size);
//memcpy(&mFrame_size,ptr_head2+IEC61937_DTS_HEAD_PTR-6,2);
//ado-no lib only pack dts core data
- mFrame_size = 2040;
+ mFrame_size = (ptr_head2[2] | ptr_head2[3] << 8)/8;
+ //ALOGI("mFrame_size:%d",mFrame_size);
MediaBuffer *buffer;
+ int8_t tmp;
+ unsigned char *ptr;
status_t err = mGroup->acquire_buffer(&buffer);
if (err != OK) {
return err;
@@ -280,6 +284,13 @@ status_t Dtshd_Media_Source::read(MediaBuffer **out, __unused const ReadOptions
return ERROR_END_OF_STREAM;
}
+ ptr = (unsigned char *)buffer->data();
+ for (i = 0;i < mFrame_size;i = i+2 ) {
+ tmp = ptr[i];
+ ptr[i] = ptr[i+1];
+ ptr[i+1] = tmp;
+ }
+
buffer->set_range(0, mFrame_size);
buffer->meta_data()->setInt64(kKeyTime, 0);
buffer->meta_data()->setInt32(kKeyIsSyncFrame, 1);