summaryrefslogtreecommitdiff
authorLianlian Zhu <lianlian.zhu@amlogic.com>2016-11-08 07:29:32 (GMT)
committer Frank Chen <frank.chen@amlogic.com>2017-02-24 08:52:40 (GMT)
commit0c1272476ffbbdc20c5238ddf22b12ebc917651e (patch)
tree3ccb5b6a4b4912915c950b14dd4d15e9193d994f
parent36e70cf306f69977aa5d61b7617e80e3c20501e1 (diff)
downloadaudio-0c1272476ffbbdc20c5238ddf22b12ebc917651e.zip
audio-0c1272476ffbbdc20c5238ddf22b12ebc917651e.tar.gz
audio-0c1272476ffbbdc20c5238ddf22b12ebc917651e.tar.bz2
PD#132015: fixed dts hdmi_in passthrough byte-order problem
Change-Id: Ic100a2ba885cf52e05a253182f041635504539ce Signed-off-by: Zhe Wang <zhe.wang@amlogic.com>
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);