author | Lianlian 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) |
commit | 0c1272476ffbbdc20c5238ddf22b12ebc917651e (patch) | |
tree | 3ccb5b6a4b4912915c950b14dd4d15e9193d994f | |
parent | 36e70cf306f69977aa5d61b7617e80e3c20501e1 (diff) | |
download | audio-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>
-rw-r--r-- | libTVaudio/audio/DTSHD_media_source.cpp | 15 |
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); |