m.write (file.string ());
}
-class Reader
+static
+void
+check_ffmpeg_stream (boost::filesystem::path ref, boost::filesystem::path check, string stream)
{
-public:
- Reader (boost::filesystem::path file)
- {
- format_context = avformat_alloc_context ();
- BOOST_REQUIRE (format_context);
- BOOST_REQUIRE (avformat_open_input (&format_context, file.string().c_str(), 0, 0) >= 0);
- BOOST_REQUIRE (avformat_find_stream_info (format_context, 0) >= 0);
- }
-
- ~Reader ()
- {
- avformat_close_input (&format_context);
- }
+ FILE* ref_file = popen(string("ffmpeg -loglevel error -i " + ref.string() + " -map 0:" + stream + " -f md5 -").c_str(), "r");
+ BOOST_REQUIRE (ref_file);
+ char ref_md5[64];
+ fscanf (ref_file, "%63s", ref_md5);
+ pclose (ref_file);
- AVFormatContext* format_context;
-};
+ FILE* check_file = popen(string("ffmpeg -loglevel error -i " + check.string() + " -map 0:" + stream + " -f md5 -").c_str(), "r");
+ BOOST_REQUIRE (check_file);
+ char check_md5[64];
+ fscanf (check_file, "%63s", check_md5);
+ pclose (check_file);
+ BOOST_REQUIRE_EQUAL (strcmp(ref_md5, check_md5), 0);
+}
void
check_ffmpeg (boost::filesystem::path ref, boost::filesystem::path check, int skip_packet_stream)
{
- Reader ref_r (ref);
- Reader check_r (check);
-
- BOOST_REQUIRE_EQUAL (ref_r.format_context->nb_streams, check_r.format_context->nb_streams);
-
- AVPacket ref_p;
- AVPacket check_p;
-
- bool skipped = false;
-
- while (true) {
- int p = av_read_frame (ref_r.format_context, &ref_p);
- int q = av_read_frame (check_r.format_context, &check_p);
- if (ref_p.stream_index == skip_packet_stream && check_p.stream_index == skip_packet_stream && !skipped) {
- skipped = true;
- continue;
- }
- BOOST_REQUIRE_EQUAL (p, q);
- BOOST_REQUIRE (p == 0 || p == AVERROR_EOF);
- if (p == AVERROR_EOF) {
- break;
- }
-
- BOOST_REQUIRE_EQUAL (ref_p.buf->size, check_p.buf->size);
- BOOST_REQUIRE_EQUAL (memcmp (ref_p.buf->data, check_p.buf->data, ref_p.buf->size), 0);
- }
+ check_ffmpeg_stream (ref, check, "v");
+ check_ffmpeg_stream (ref, check, "a");
}
void