change video pts

Signed-off-by: y30025806 <yangjunhui10@huawei.com>
Change-Id: I0149c2b72fefa8e0e75c63291c2aaf07d8fb9374
This commit is contained in:
y30025806 2024-08-13 14:48:25 +08:00
parent 16e1ad3d87
commit eed1e71645
4 changed files with 15 additions and 14 deletions

View File

@ -125,6 +125,7 @@ const char *OH_MD_KEY_DECODING_TIMESTAMP = "decoding_timestamp";
const char *OH_MD_KEY_BUFFER_DURATION = "buffer_duration";
const char *OH_MD_KEY_VIDEO_SAR = "video_sar";
const char *OH_MD_KEY_START_TIME = "start_time";
const char *OH_MD_KEY_TRACK_START_TIME = "track_start_time";
const char *OH_MD_KEY_VIDEO_DECODER_OUTPUT_COLOR_SPACE = "video_decoder_output_colorspace";
#ifdef __cplusplus

View File

@ -626,6 +626,13 @@ extern const char *OH_MD_KEY_VIDEO_SAR;
* @since 12
*/
extern const char *OH_MD_KEY_START_TIME;
/**
* @brief Key for start time of track, value type is int64_t.
*
* @syscap SystemCapability.Multimedia.Media.CodecBase
* @since 12
*/
extern const char *OH_MD_KEY_TRACK_START_TIME;
/**
* @brief Key for setting the output color space of video decoder. The value type is int32_t.
* The supported value is {@link OH_COLORSPACE_BT709_LIMIT}, see {@link OH_NativeBuffer_ColorSpace}. It is used in

View File

@ -838,19 +838,9 @@ void FFmpegDemuxerPlugin::ConvertPacketToAnnexb(std::shared_ptr<AVBuffer> sample
void FFmpegDemuxerPlugin::WriteBufferAttr(std::shared_ptr<AVBuffer> sample, std::shared_ptr<SamplePacket> samplePacket)
{
// pts
int64_t pts = 0;
AVStream *avStream = formatContext_->streams[samplePacket->pkts[0]->stream_index];
if (avStream->start_time == AV_NOPTS_VALUE || ioContext_.dataSource->IsDash()) {
avStream->start_time = 0;
}
if (avStream->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
int64_t inputPts = ConvertPts(samplePacket->pkts[0]->pts, avStream->start_time);
pts = AvTime2Us(ConvertTimeFromFFmpeg(inputPts, avStream->time_base));
} else {
pts = AvTime2Us(ConvertTimeFromFFmpeg(samplePacket->pkts[0]->pts, avStream->time_base));
}
if (samplePacket->pkts[0]->pts != AV_NOPTS_VALUE) {
sample->pts_ = AvTime2Us(ConvertTimeFromFFmpeg(samplePacket->pkts[0]->pts, avStream->time_base));
sample->absPts_ = AvTime2Us(ConvertTimeFromFFmpeg(samplePacket->pkts[0]->pts, avStream->time_base));
}
// durantion dts
@ -864,7 +854,6 @@ void FFmpegDemuxerPlugin::WriteBufferAttr(std::shared_ptr<AVBuffer> sample, std:
sample->dts_ = dts;
sample->meta_->SetData(Media::Tag::BUFFER_DECODING_TIMESTAMP, dts);
}
sample->pts_ = pts;
}
Status FFmpegDemuxerPlugin::ConvertAVPacketToSample(

View File

@ -437,8 +437,12 @@ void FFmpegFormatHelper::ParseAVTrackInfo(const AVStream& avStream, Meta &format
} else {
MEDIA_LOG_D("Parse track language info failed.");
}
format.SetData(Tag::MEDIA_START_TIME,
ConvertTimeFromFFmpeg(avStream.start_time, avStream.time_base));
if (avStream.start_time != AV_NOPTS_VALUE) {
format.SetData(Tag::MEDIA_START_TIME,
ConvertTimeFromFFmpeg(avStream.start_time, avStream.time_base));
} else {
MEDIA_LOG_D("Parse track start time info failed.");
}
}
void FFmpegFormatHelper::ParseVideoTrackInfo(const AVStream& avStream, Meta &format)