1e5c31af7Sopenharmony_ci#ifndef _EXTESEXTRACTOR_HPP 2e5c31af7Sopenharmony_ci#define _EXTESEXTRACTOR_HPP 3e5c31af7Sopenharmony_ci/* 4e5c31af7Sopenharmony_ci* Copyright (C) 2023 Igalia, S.L. 5e5c31af7Sopenharmony_ci* 6e5c31af7Sopenharmony_ci* Licensed under the Apache License, Version 2.0 (the "License"); 7e5c31af7Sopenharmony_ci* you may not use this file except in compliance with the License. 8e5c31af7Sopenharmony_ci* You may obtain a copy of the License at 9e5c31af7Sopenharmony_ci* 10e5c31af7Sopenharmony_ci* http://www.apache.org/licenses/LICENSE-2.0 11e5c31af7Sopenharmony_ci* 12e5c31af7Sopenharmony_ci* Unless required by applicable law or agreed to in writing, software 13e5c31af7Sopenharmony_ci* distributed under the License is distributed on an "AS IS" BASIS, 14e5c31af7Sopenharmony_ci* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15e5c31af7Sopenharmony_ci* See the License for the specific language governing permissions and 16e5c31af7Sopenharmony_ci* limitations under the License. 17e5c31af7Sopenharmony_ci*/ 18e5c31af7Sopenharmony_ci 19e5c31af7Sopenharmony_ci#include "esextractor.h" 20e5c31af7Sopenharmony_ci#include "tcuTestLog.hpp" 21e5c31af7Sopenharmony_ci 22e5c31af7Sopenharmony_ciclass ESEDemuxer { 23e5c31af7Sopenharmony_ci ESExtractor *extractor{}; 24e5c31af7Sopenharmony_ci ESEPacket* pkt{}; 25e5c31af7Sopenharmony_ci ESEVideoCodec eVideoCodec{ESE_VIDEO_CODEC_UNKNOWN}; 26e5c31af7Sopenharmony_ci 27e5c31af7Sopenharmony_ci tcu::TestLog& log; 28e5c31af7Sopenharmony_ci 29e5c31af7Sopenharmony_cipublic: 30e5c31af7Sopenharmony_ci ESEDemuxer(const std::string& filePath, tcu::TestLog& log_) 31e5c31af7Sopenharmony_ci : extractor(es_extractor_new(filePath.c_str(), "Alignment:NAL")) 32e5c31af7Sopenharmony_ci , log(log_) 33e5c31af7Sopenharmony_ci { 34e5c31af7Sopenharmony_ci eVideoCodec = es_extractor_video_codec(extractor); 35e5c31af7Sopenharmony_ci log << tcu::TestLog::Message << "ESEDemuxer found video codec: " << eVideoCodec << tcu::TestLog::EndMessage; 36e5c31af7Sopenharmony_ci } 37e5c31af7Sopenharmony_ci 38e5c31af7Sopenharmony_ci ~ESEDemuxer() 39e5c31af7Sopenharmony_ci { 40e5c31af7Sopenharmony_ci if (pkt) { 41e5c31af7Sopenharmony_ci es_extractor_clear_packet(pkt); 42e5c31af7Sopenharmony_ci } 43e5c31af7Sopenharmony_ci es_extractor_teardown(extractor); 44e5c31af7Sopenharmony_ci } 45e5c31af7Sopenharmony_ci 46e5c31af7Sopenharmony_ci ESEVideoCodec GetVideoCodec() { 47e5c31af7Sopenharmony_ci if (!extractor) { 48e5c31af7Sopenharmony_ci return ESE_VIDEO_CODEC_UNKNOWN; 49e5c31af7Sopenharmony_ci } 50e5c31af7Sopenharmony_ci return eVideoCodec; 51e5c31af7Sopenharmony_ci } 52e5c31af7Sopenharmony_ci 53e5c31af7Sopenharmony_ci bool Demux(deUint8 **ppVideo, deInt64 *pnVideoBytes) { 54e5c31af7Sopenharmony_ci if (!extractor) { 55e5c31af7Sopenharmony_ci return false; 56e5c31af7Sopenharmony_ci } 57e5c31af7Sopenharmony_ci 58e5c31af7Sopenharmony_ci *pnVideoBytes = 0; 59e5c31af7Sopenharmony_ci 60e5c31af7Sopenharmony_ci if (pkt) { 61e5c31af7Sopenharmony_ci es_extractor_clear_packet(pkt); 62e5c31af7Sopenharmony_ci pkt = nullptr; 63e5c31af7Sopenharmony_ci } 64e5c31af7Sopenharmony_ci 65e5c31af7Sopenharmony_ci int e = 0; 66e5c31af7Sopenharmony_ci e = es_extractor_read_packet(extractor, &pkt); 67e5c31af7Sopenharmony_ci 68e5c31af7Sopenharmony_ci if (e > ESE_RESULT_LAST_PACKET) { 69e5c31af7Sopenharmony_ci return false; 70e5c31af7Sopenharmony_ci } 71e5c31af7Sopenharmony_ci 72e5c31af7Sopenharmony_ci *ppVideo = pkt->data; 73e5c31af7Sopenharmony_ci *pnVideoBytes = static_cast<int>(pkt->data_size); 74e5c31af7Sopenharmony_ci 75e5c31af7Sopenharmony_ci return true; 76e5c31af7Sopenharmony_ci } 77e5c31af7Sopenharmony_ci}; 78e5c31af7Sopenharmony_ci 79e5c31af7Sopenharmony_ciinline vk::VkVideoCodecOperationFlagBitsKHR EXExtractor2NvCodecId(ESEVideoCodec id) { 80e5c31af7Sopenharmony_ci switch (id) { 81e5c31af7Sopenharmony_ci case ESE_VIDEO_CODEC_H264 : return vk::VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR; 82e5c31af7Sopenharmony_ci case ESE_VIDEO_CODEC_H265 : return vk::VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR; 83e5c31af7Sopenharmony_ci default : /* assert(false); */ return vk::VkVideoCodecOperationFlagBitsKHR(0); 84e5c31af7Sopenharmony_ci } 85e5c31af7Sopenharmony_ci} 86e5c31af7Sopenharmony_ci#endif // _EXTESEXTRACTOR_HPP 87