source: git/src/moviemaker.h @ 8a7804fb

Last change on this file since 8a7804fb was 0b99107, checked in by Olly Betts <olly@…>, 3 weeks ago

Eliminate old FSF addresses

Update GPL/LGPL licence files and boilerplate to direct people who
didn't receive the licence text to the FSF website, as the current
versions of the FSF licence texts now do, rather than giving a postal
address.

  • Property mode set to 100644
File size: 2.1 KB
Line 
1//
2//  moviemaker.h
3//
4//  Class for writing movies from Aven.
5//
6//  Copyright (C) 2004,2010,2011,2013,2014,2016,2023 Olly Betts
7//
8//  This program is free software; you can redistribute it and/or modify
9//  it under the terms of the GNU General Public License as published by
10//  the Free Software Foundation; either version 2 of the License, or
11//  (at your option) any later version.
12//
13//  This program is distributed in the hope that it will be useful,
14//  but WITHOUT ANY WARRANTY; without even the implied warranty of
15//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16//  GNU General Public License for more details.
17//
18//  You should have received a copy of the GNU General Public License
19//  along with this program; if not, see
20//  <https://www.gnu.org/licenses/>.
21//
22
23#ifndef moviemaker_h
24#define moviemaker_h
25
26#ifndef PACKAGE
27# error config.h must be included first in each C++ source file
28#endif
29
30#include <stdio.h>
31
32struct AVCodecContext;
33struct AVFormatContext;
34struct AVStream;
35struct AVFrame;
36struct AVPicture;
37struct SwsContext;
38
39#ifdef WITH_FFMPEG
40extern "C" {
41// To get LIBAVCODEC_VERSION_MAJOR defined:
42# include <libavcodec/avcodec.h>
43}
44#endif
45
46class MovieMaker {
47#ifdef WITH_FFMPEG
48    AVFormatContext *oc = nullptr;
49    AVStream *video_st = nullptr;
50# if LIBAVCODEC_VERSION_MAJOR < 57
51#  ifndef HAVE_AVCODEC_ENCODE_VIDEO2
52    int out_size = 0; // Legacy-only.
53#  endif
54# endif
55    AVCodecContext *context = nullptr;
56    AVFrame *frame = nullptr;
57# if LIBAVCODEC_VERSION_MAJOR < 57
58#  ifndef HAVE_AVCODEC_ENCODE_VIDEO2
59    unsigned char *outbuf = nullptr; // Legacy-only.
60#  endif
61# endif
62    unsigned char *pixels = nullptr;
63    SwsContext *sws_ctx = nullptr;
64    int averrno = 0;
65    FILE* fh_to_close = nullptr;
66
67    int encode_frame(AVFrame* frame);
68    void release();
69#endif
70
71public:
72    MovieMaker();
73    bool Open(FILE* fh, const char* ext, int width, int height);
74    unsigned char * GetBuffer() const;
75    int GetWidth() const;
76    int GetHeight() const;
77    bool AddFrame();
78    bool Close();
79    ~MovieMaker();
80    const char * get_error_string() const;
81};
82
83#endif
Note: See TracBrowser for help on using the repository browser.