Get offset of recorded keyframe from MTP table
Test: atest VtsHalTvTunerV1_1TargetTest Bug: 158816517 Change-Id: Ia48637554fc5020b6de422feac7efc04c070fae7
This commit is contained in:
parent
8c8286e5a5
commit
b12ccd3e30
4 changed files with 59 additions and 12 deletions
|
@ -209,6 +209,7 @@ Return<void> Filter::getAvSharedHandle(getAvSharedHandle_cb _hidl_cb) {
|
||||||
|
|
||||||
if (mSharedAvMemHandle.getNativeHandle() != nullptr) {
|
if (mSharedAvMemHandle.getNativeHandle() != nullptr) {
|
||||||
_hidl_cb(Result::SUCCESS, mSharedAvMemHandle, BUFFER_SIZE_16M);
|
_hidl_cb(Result::SUCCESS, mSharedAvMemHandle, BUFFER_SIZE_16M);
|
||||||
|
mUsingSharedAvMem = true;
|
||||||
return Void();
|
return Void();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -225,6 +226,7 @@ Return<void> Filter::getAvSharedHandle(getAvSharedHandle_cb _hidl_cb) {
|
||||||
::close(av_fd);
|
::close(av_fd);
|
||||||
|
|
||||||
_hidl_cb(Result::SUCCESS, mSharedAvMemHandle, BUFFER_SIZE_16M);
|
_hidl_cb(Result::SUCCESS, mSharedAvMemHandle, BUFFER_SIZE_16M);
|
||||||
|
mUsingSharedAvMem = true;
|
||||||
return Void();
|
return Void();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -678,11 +680,10 @@ Result Filter::startRecordFilterHandler() {
|
||||||
recordEvent = {
|
recordEvent = {
|
||||||
.byteNumber = mRecordFilterOutput.size(),
|
.byteNumber = mRecordFilterOutput.size(),
|
||||||
};
|
};
|
||||||
V1_1::DemuxFilterRecordEventExt recordEventExt;
|
V1_1::DemuxFilterTsRecordEventExt recordEventExt;
|
||||||
recordEventExt = {
|
recordEventExt = {
|
||||||
.pts = (mPts == 0) ? time(NULL) * 900000 : mPts,
|
.pts = (mPts == 0) ? time(NULL) * 900000 : mPts,
|
||||||
.firstMbInSlice = 0, // random address
|
.firstMbInSlice = 0, // random address
|
||||||
.mpuSequenceNumber = 1, // random sequence number
|
|
||||||
};
|
};
|
||||||
|
|
||||||
int size;
|
int size;
|
||||||
|
|
|
@ -227,7 +227,7 @@ class Filter : public V1_1::IFilter {
|
||||||
|
|
||||||
// Shared A/V memory handle
|
// Shared A/V memory handle
|
||||||
hidl_handle mSharedAvMemHandle;
|
hidl_handle mSharedAvMemHandle;
|
||||||
bool mUsingSharedAvMem = true;
|
bool mUsingSharedAvMem = false;
|
||||||
uint32_t mSharedAvMemOffset = 0;
|
uint32_t mSharedAvMemOffset = 0;
|
||||||
|
|
||||||
uint32_t mAudioStreamType;
|
uint32_t mAudioStreamType;
|
||||||
|
|
|
@ -20,6 +20,7 @@ import @1.0::Constant;
|
||||||
import @1.0::DemuxFilterMmtpRecordEvent;
|
import @1.0::DemuxFilterMmtpRecordEvent;
|
||||||
import @1.0::DemuxFilterTsRecordEvent;
|
import @1.0::DemuxFilterTsRecordEvent;
|
||||||
import @1.0::DemuxScIndex;
|
import @1.0::DemuxScIndex;
|
||||||
|
import @1.0::DemuxTsIndex;
|
||||||
import @1.0::FrontendIsdbs3Rolloff;
|
import @1.0::FrontendIsdbs3Rolloff;
|
||||||
import @1.0::FrontendAtsc3Bandwidth;
|
import @1.0::FrontendAtsc3Bandwidth;
|
||||||
import @1.0::FrontendAtsc3Modulation;
|
import @1.0::FrontendAtsc3Modulation;
|
||||||
|
@ -51,11 +52,11 @@ import android.hidl.safe_union@1.0::Monostate;
|
||||||
@export
|
@export
|
||||||
enum Constant : @1.0::Constant {
|
enum Constant : @1.0::Constant {
|
||||||
/**
|
/**
|
||||||
* An invalid mpuSequenceNumber in DemuxFilterRecordEventExt.
|
* An invalid mpuSequenceNumber.
|
||||||
*/
|
*/
|
||||||
INVALID_MMTP_RECORD_EVENT_MPT_SEQUENCE_NUM = 0xFFFFFFFF,
|
INVALID_MMTP_RECORD_EVENT_MPT_SEQUENCE_NUM = 0xFFFFFFFF,
|
||||||
/**
|
/**
|
||||||
* An invalid first macroblock address in DemuxFilterRecordEventExt.
|
* An invalid first macroblock address.
|
||||||
*/
|
*/
|
||||||
INVALID_FIRST_MACROBLOCK_IN_SLICE = 0xFFFFFFFF,
|
INVALID_FIRST_MACROBLOCK_IN_SLICE = 0xFFFFFFFF,
|
||||||
/**
|
/**
|
||||||
|
@ -91,9 +92,25 @@ enum Constant64Bit : uint64_t {
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Extended Demux Filter Record Event.
|
* Extended Demux Filter TS Record Event.
|
||||||
*/
|
*/
|
||||||
struct DemuxFilterRecordEventExt {
|
struct DemuxFilterTsRecordEventExt {
|
||||||
|
/**
|
||||||
|
* The Presentation Time Stamp(PTS) for the audio or video frame. It is based on 90KHz
|
||||||
|
* and has the same format as the PTS in ISO/IEC 13818-1.
|
||||||
|
*/
|
||||||
|
uint64_t pts;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specifies the address of the first macroblock in the slice defined in ITU-T Rec. H.264.
|
||||||
|
*/
|
||||||
|
uint32_t firstMbInSlice;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extended Demux Filter MMTP Record Event.
|
||||||
|
*/
|
||||||
|
struct DemuxFilterMmtpRecordEventExt {
|
||||||
/**
|
/**
|
||||||
* The Presentation Time Stamp(PTS) for the audio or video frame. It is based on 90KHz
|
* The Presentation Time Stamp(PTS) for the audio or video frame. It is based on 90KHz
|
||||||
* and has the same format as the PTS in ISO/IEC 13818-1.
|
* and has the same format as the PTS in ISO/IEC 13818-1.
|
||||||
|
@ -109,6 +126,11 @@ struct DemuxFilterRecordEventExt {
|
||||||
* Specifies the address of the first macroblock in the slice defined in ITU-T Rec. H.264.
|
* Specifies the address of the first macroblock in the slice defined in ITU-T Rec. H.264.
|
||||||
*/
|
*/
|
||||||
uint32_t firstMbInSlice;
|
uint32_t firstMbInSlice;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TS index mask.
|
||||||
|
*/
|
||||||
|
bitfield<@1.1::DemuxTsIndex> tsIndexMask;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -118,13 +140,13 @@ struct DemuxFilterEventExt {
|
||||||
safe_union Event {
|
safe_union Event {
|
||||||
/**
|
/**
|
||||||
* No extended record filter Event. This is used by the tsRecord or mmtpRecord filter event
|
* No extended record filter Event. This is used by the tsRecord or mmtpRecord filter event
|
||||||
* that does not contain the DemuxFilterRecordEventExt information.
|
* that does not contain the DemuxFilterTs/MmtpRecordEventExt information.
|
||||||
*/
|
*/
|
||||||
Monostate noinit;
|
Monostate noinit;
|
||||||
|
|
||||||
DemuxFilterRecordEventExt tsRecord;
|
DemuxFilterTsRecordEventExt tsRecord;
|
||||||
|
|
||||||
DemuxFilterRecordEventExt mmtpRecord;
|
DemuxFilterMmtpRecordEventExt mmtpRecord;
|
||||||
|
|
||||||
ScramblingStatus scramblingStatus;
|
ScramblingStatus scramblingStatus;
|
||||||
};
|
};
|
||||||
|
@ -816,3 +838,27 @@ enum DemuxScIndex : @1.0::DemuxScIndex {
|
||||||
*/
|
*/
|
||||||
SP_SLICE = 1 << 8,
|
SP_SLICE = 1 << 8,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@export
|
||||||
|
enum DemuxTsIndex : @1.0::DemuxTsIndex {
|
||||||
|
/**
|
||||||
|
* Index the address of MMT Packet Table(MPT).
|
||||||
|
*/
|
||||||
|
MPT_INDEX_MPT = 1 << 16,
|
||||||
|
/**
|
||||||
|
* Index the address of Video.
|
||||||
|
*/
|
||||||
|
MPT_INDEX_VIDEO = 1 << 17,
|
||||||
|
/**
|
||||||
|
* Index the address of Audio.
|
||||||
|
*/
|
||||||
|
MPT_INDEX_AUDIO = 1 << 18,
|
||||||
|
/**
|
||||||
|
* Index to indicate this is a target of timestamp extraction for video.
|
||||||
|
*/
|
||||||
|
MPT_INDEX_TIMESTAMP_TARGET_VIDEO = 1 << 19,
|
||||||
|
/**
|
||||||
|
* Index to indicate this is a target of timestamp extraction for audio.
|
||||||
|
*/
|
||||||
|
MPT_INDEX_TIMESTAMP_TARGET_AUDIO = 1 << 20,
|
||||||
|
};
|
||||||
|
|
|
@ -64,9 +64,9 @@ void FilterCallback::readFilterEventData() {
|
||||||
break;
|
break;
|
||||||
case DemuxFilterEventExt::Event::hidl_discriminator::mmtpRecord:
|
case DemuxFilterEventExt::Event::hidl_discriminator::mmtpRecord:
|
||||||
ALOGD("[vts] Extended MMTP record filter event, pts=%" PRIu64
|
ALOGD("[vts] Extended MMTP record filter event, pts=%" PRIu64
|
||||||
", firstMbInSlice=%d, mpuSequenceNumber=%d",
|
", firstMbInSlice=%d, mpuSequenceNumber=%d, tsIndexMask=%d",
|
||||||
eventExt.mmtpRecord().pts, eventExt.mmtpRecord().firstMbInSlice,
|
eventExt.mmtpRecord().pts, eventExt.mmtpRecord().firstMbInSlice,
|
||||||
eventExt.mmtpRecord().mpuSequenceNumber);
|
eventExt.mmtpRecord().mpuSequenceNumber, eventExt.mmtpRecord().tsIndexMask);
|
||||||
break;
|
break;
|
||||||
case DemuxFilterEventExt::Event::hidl_discriminator::scramblingStatus:
|
case DemuxFilterEventExt::Event::hidl_discriminator::scramblingStatus:
|
||||||
mScramblingStatusEvent++;
|
mScramblingStatusEvent++;
|
||||||
|
|
Loading…
Reference in a new issue