From 0c1272476ffbbdc20c5238ddf22b12ebc917651e Mon Sep 17 00:00:00 2001 From: Lianlian Zhu Date: Tue, 08 Nov 2016 07:29:32 +0000 Subject: PD#132015: fixed dts hdmi_in passthrough byte-order problem Change-Id: Ic100a2ba885cf52e05a253182f041635504539ce Signed-off-by: Zhe Wang --- 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); -- cgit