]> git.sesse.net Git - nageru/blob - main.cpp
Initial checkin.
[nageru] / main.cpp
1 #include <stdio.h>
2 #include <memory>
3
4 extern "C" {
5 #include <libavformat/avformat.h>
6 }
7
8 #include "ffmpeg_raii.h"
9
10 using namespace std;
11
12 int main(void)
13 {
14         av_register_all();
15         avformat_network_init();
16
17         auto format_ctx = avformat_open_input_unique("example.mp4", nullptr, nullptr);
18         if (format_ctx == nullptr) {
19                 fprintf(stderr, "%s: Error opening file\n", "example.mp4");
20                 return 1;
21         }
22
23         for ( ;; ) {
24                 AVPacket pkt;
25                 unique_ptr<AVPacket, decltype(av_packet_unref)*> pkt_cleanup(
26                         &pkt, av_packet_unref);
27                 av_init_packet(&pkt);
28                 pkt.data = nullptr;
29                 pkt.size = 0;
30                 if (av_read_frame(format_ctx.get(), &pkt) != 0) {
31                         break;
32                 }
33                 fprintf(stderr, "Got a frame from camera %d, pts = %ld, size = %d\n",
34                         pkt.stream_index, pkt.pts, pkt.size);
35                 char filename[256];
36                 snprintf(filename, sizeof(filename), "frames/cam%d-pts%09ld.jpeg", pkt.stream_index, pkt.pts);
37                 FILE *fp = fopen(filename, "wb");
38                 if (fp == nullptr) {
39                         perror(filename);
40                         exit(1);
41                 }
42                 fwrite(pkt.data, pkt.size, 1, fp);
43                 fclose(fp);
44         }
45
46         return 0;
47 }