MCPcopy Create free account
hub / github.com/alibaba/CicadaPlayer / test_codec

Function test_codec

framework/tests/decoder/decoderUnitTest.cpp:16–73  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

14using namespace std;
15
16static void test_codec(const string &url, AFCodecID codec, int flags)
17{
18 auto source = dataSourcePrototype::create(url);
19 source->Open(0);
20 auto *demuxer = new demuxer_service(source);
21 int ret = demuxer->initOpen();
22 Stream_meta smeta{};
23 unique_ptr<streamMeta> meta = unique_ptr<streamMeta>(new streamMeta(&smeta));
24 unique_ptr<IDecoder> decoder{nullptr};
25 for (int i = 0; i < demuxer->GetNbStreams(); ++i) {
26 demuxer->GetStreamMeta(meta, i, false);
27
28 if (((Stream_meta *) (*meta))->codec == codec) {
29 decoder = decoderFactory::create(*((Stream_meta *) (*meta)), flags, 0 , nullptr);
30 ASSERT_TRUE(decoder);
31 demuxer->OpenStream(i);
32 ret = decoder->open(((Stream_meta *) (*meta)), nullptr, 0, nullptr);
33 ASSERT_TRUE(ret >= 0);
34 break;
35 }
36 }
37
38 std::unique_ptr<IAFPacket> packet{nullptr};
39
40 do {
41 int decoder_ret;
42 ret = demuxer->readPacket(packet, 0);
43
44 if (ret > 0) {
45 decoder_ret = decoder->send_packet(packet, 0);
46 ASSERT_TRUE(decoder_ret >= 0);
47 }
48
49 if (ret == -EAGAIN) {
50 af_msleep(10);
51 ret = 0;
52 continue;
53 }
54
55 unique_ptr<IAFFrame> frame{nullptr};
56 decoder_ret = decoder->getFrame(frame, 0);
57
58 if (decoder_ret == -EAGAIN) {
59 af_msleep(10);
60 continue;
61 }
62
63 ASSERT_GE(decoder_ret, 0);
64
65 if (frame) {
66 frame->dump();
67 break;
68 }
69 } while (ret >= 0);
70
71 delete source;
72 delete demuxer;
73}

Callers 1

TESTFunction · 0.85

Calls 11

af_msleepFunction · 0.85
initOpenMethod · 0.80
OpenMethod · 0.45
GetNbStreamsMethod · 0.45
GetStreamMetaMethod · 0.45
OpenStreamMethod · 0.45
openMethod · 0.45
readPacketMethod · 0.45
send_packetMethod · 0.45
getFrameMethod · 0.45
dumpMethod · 0.45

Tested by

no test coverage detected