Added the bit stream reader feature. (#433)
* * rocDecode/ES parser: Added elementary stream file parser for HEVC and AVC. * * rocDecode/ES parser: Added elementary stream file parser for AV1. Also cleaned up the bitstream ring buffer code. * * rocDecode/ES parser: Added the IVF container file parser for AV1. Also fixed a bug in fill ring buffer function. * * rocDecode/ES file parder: Added supported stream type detection. - The stream type detection checks the unique syntax patterns of the stream type and calculate the likeliheed score. Based on the score, the most likely type is determined. - The current supported stream types are: AVC/HEVC/AV1 elementary streams, IVF AV1 streams. * * rocDecode/ES file parser: Fixed an AVC decode regression due to a copy and paste error. * * rocDecode/ES file parser: Added bit depth parsing for codec support check; Added stronger AV1 detection for IVF AV1 stream type. * * rocDecode/ES file parser: Removed debugging logs. * * rocDecode/ES file parser: Added exmaple code to use the built-in file parser. * * rocDecode/Bitstream reader: Renamed the elementary parser feature to bitstream reader and re-organized the code. - Moved the bitstream reader code to rocDecode core lib from utility. - Added bitstream reader interface in parallel with rocDecode parser and decoder interfaces. * * rocDecode/Bitstream reader: Added sample to use bitstream reader, instead of FFMPEG demuxer, to get picture data. Also reverted the original sample app back to using FFMPEG demuxer only. * * rocDecode/Bitstream reader: Renamed the new sample app. * * rocDecode/Bitstream reader: FFMPEG dependency reduction. - Moved MD5 functions out of RocVideoDecoder utility class. This removed RocVideoDecoder's dependency on FFMPEG. - Added the new MD5 utility, which depends on FFMPEG lib. MD5 message digest generation is now performed in the MD5 utility. - Modified decode sampples that uses MD5 generation function. - Removed FFMPEG dependency from video decoder basic sample. * * rocDecode/Bitstream reader: Added option to use bitstream reader to video decode sample and conformance test script. Added the missing destroy bitstream reader call in video decode basic sample. * * rocDecode/Bitstream reader: Minor format change. No functional changes. * * rocDecode/Bitstream reader: Added handling of unsupported stream file type by the bitstream reader to decode sample apps. * * rocDecode/Bitstream reader: Fixed build errors of several samples. * * rocDecode/Bitstream reader: Added changes based on review comments. * * rocDecode/Bitstream reader: File name changes based on review comments. * * rocDecode/Bitstream reader: Moved MD5 code into single header file. Added changes based on review comments. * * rocDecode/Bitstream reader: Removed redundant path. * * rocDecode/Bitstream reader: Changed rocDecode version to 0.10.0. Added minor changes based on review comments. --------- Co-authored-by: Kiriti Gowda <kiritigowda@gmail.com>
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
52eb62fabf
Коммит
e62aa3e09b
@@ -37,6 +37,7 @@ THE SOFTWARE.
|
||||
#endif
|
||||
#include "video_demuxer.h"
|
||||
#include "roc_video_dec.h"
|
||||
#include "md5.h"
|
||||
|
||||
class FileStreamProvider : public VideoDemuxer::StreamProvider {
|
||||
public:
|
||||
@@ -210,9 +211,11 @@ int main(int argc, char **argv) {
|
||||
OutputSurfaceInfo *surf_info;
|
||||
uint32_t width, height;
|
||||
double total_dec_time = 0;
|
||||
MD5Generator *md5_generator = nullptr;
|
||||
|
||||
if (b_generate_md5) {
|
||||
viddec.InitMd5();
|
||||
md5_generator = new MD5Generator();
|
||||
md5_generator->InitMd5();
|
||||
}
|
||||
|
||||
do {
|
||||
@@ -233,7 +236,7 @@ int main(int argc, char **argv) {
|
||||
for (int i = 0; i < n_frame_returned; i++) {
|
||||
pframe = viddec.GetFrame(&pts);
|
||||
if (b_generate_md5) {
|
||||
viddec.UpdateMd5ForFrame(pframe, surf_info);
|
||||
md5_generator->UpdateMd5ForFrame(pframe, surf_info);
|
||||
}
|
||||
if (dump_output_frames && mem_type != OUT_SURFACE_MEM_NOT_MAPPED) {
|
||||
viddec.SaveFrameToFile(output_file_path, pframe, surf_info);
|
||||
@@ -258,7 +261,7 @@ int main(int argc, char **argv) {
|
||||
}
|
||||
if (b_generate_md5) {
|
||||
uint8_t *digest;
|
||||
viddec.FinalizeMd5(&digest);
|
||||
md5_generator->FinalizeMd5(&digest);
|
||||
std::cout << "MD5 message digest: ";
|
||||
for (int i = 0; i < 16; i++) {
|
||||
std::cout << std::setfill('0') << std::setw(2) << std::hex << static_cast<int>(digest[i]);
|
||||
@@ -289,6 +292,7 @@ int main(int argc, char **argv) {
|
||||
std::cout << ref_md5_string << std::endl;
|
||||
ref_md5_file.close();
|
||||
}
|
||||
delete md5_generator;
|
||||
}
|
||||
} catch (const std::exception &ex) {
|
||||
std::cout << ex.what() << std::endl;
|
||||
|
||||
Ссылка в новой задаче
Block a user