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
RevLine 
[6a4cdcb6]1//
2//  moviemaker.h
3//
4//  Class for writing movies from Aven.
5//
[47b2b81]6//  Copyright (C) 2004,2010,2011,2013,2014,2016,2023 Olly Betts
[6a4cdcb6]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
[0b99107]19//  along with this program; if not, see
20//  <https://www.gnu.org/licenses/>.
[6a4cdcb6]21//
22
[6c36b54]23#ifndef moviemaker_h
24#define moviemaker_h
25
[ee3d89c]26#ifndef PACKAGE
27# error config.h must be included first in each C++ source file
28#endif
29
[f4e4b56]30#include <stdio.h>
31
[0aaa578]32struct AVCodecContext;
[1805274]33struct AVFormatContext;
34struct AVStream;
[6a4cdcb6]35struct AVFrame;
36struct AVPicture;
[9e516d0d]37struct SwsContext;
[6a4cdcb6]38
[40d1db36]39#ifdef WITH_FFMPEG
[47b2b81]40extern "C" {
41// To get LIBAVCODEC_VERSION_MAJOR defined:
42# include <libavcodec/avcodec.h>
43}
44#endif
45
[6a4cdcb6]46class MovieMaker {
[40d1db36]47#ifdef WITH_FFMPEG
[a3f83057]48    AVFormatContext *oc = nullptr;
49    AVStream *video_st = nullptr;
[47b2b81]50# if LIBAVCODEC_VERSION_MAJOR < 57
51#  ifndef HAVE_AVCODEC_ENCODE_VIDEO2
[a3f83057]52    int out_size = 0; // Legacy-only.
[47b2b81]53#  endif
[bc6faa9]54# endif
[a3f83057]55    AVCodecContext *context = nullptr;
56    AVFrame *frame = nullptr;
[5fa6f1f0]57# if LIBAVCODEC_VERSION_MAJOR < 57
[47b2b81]58#  ifndef HAVE_AVCODEC_ENCODE_VIDEO2
[a3f83057]59    unsigned char *outbuf = nullptr; // Legacy-only.
[47b2b81]60#  endif
[bc6faa9]61# endif
[a3f83057]62    unsigned char *pixels = nullptr;
63    SwsContext *sws_ctx = nullptr;
64    int averrno = 0;
65    FILE* fh_to_close = nullptr;
[b49ac56]66
[0aaa578]67    int encode_frame(AVFrame* frame);
[98fd937]68    void release();
[c648bd1]69#endif
[98fd937]70
[6a4cdcb6]71public:
[1805274]72    MovieMaker();
[f4e4b56]73    bool Open(FILE* fh, const char* ext, int width, int height);
[6a4cdcb6]74    unsigned char * GetBuffer() const;
75    int GetWidth() const;
76    int GetHeight() const;
[98fd937]77    bool AddFrame();
78    bool Close();
[6a4cdcb6]79    ~MovieMaker();
[091069f]80    const char * get_error_string() const;
[6a4cdcb6]81};
[6c36b54]82
83#endif
Note: See TracBrowser for help on using the repository browser.