QTfrontend/util/LibavInteraction.cpp
author nemo
Tue, 30 Apr 2019 09:36:13 -0400
changeset 14864 8d65728c4ed0
parent 14636 92ebe33c5eb6
permissions -rw-r--r--
Backed out changeset 13589d529899 So, we only disabled this on the release branch in r29d614a5c9eb due to having discovered it JUST before release. We should fix it properly in default...
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7897
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
     1
/*
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
     2
 * Hedgewars, a free turn based strategy game
11046
47a8c19ecb60 more copyright fixes
sheepluva
parents: 10108
diff changeset
     3
 * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
7897
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
     4
 *
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License as published by
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
     7
 * the Free Software Foundation; version 2 of the License
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
     8
 *
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    12
 * GNU General Public License for more details.
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    13
 *
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
10108
c68cf030eded update FSF address. note: two sdl include files (by Sam Lantinga) still have the old FSF address in their copyright - but I ain't gonna touch their copyright headers
sheepluva
parents: 9998
diff changeset
    16
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
7897
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    17
 */
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    18
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    19
#include "LibavInteraction.h"
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    20
11857
d7227dc3b397 fix build
sheepluva
parents: 11373
diff changeset
    21
#ifdef VIDEOREC
7897
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    22
extern "C"
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    23
{
11298
9fcdf0969d53 Update libav API, keeping forward and backward compatibility
Vittorio Giovara <vittorio.giovara@gmail.com>
parents: 11046
diff changeset
    24
#include "libavcodec/avcodec.h"
7897
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    25
#include "libavformat/avformat.h"
11298
9fcdf0969d53 Update libav API, keeping forward and backward compatibility
Vittorio Giovara <vittorio.giovara@gmail.com>
parents: 11046
diff changeset
    26
#include "libavutil/avutil.h"
7897
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    27
}
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    28
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    29
#include <QVector>
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    30
#include <QList>
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    31
#include <QComboBox>
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    32
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    33
#include "HWApplication.h"
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    34
11298
9fcdf0969d53 Update libav API, keeping forward and backward compatibility
Vittorio Giovara <vittorio.giovara@gmail.com>
parents: 11046
diff changeset
    35
// compatibility section
11373
ac423fd2b9a3 libavinteraction: Adjust version guard for av_codec_is_encoder()
Vittorio Giovara <vittorio.giovara@gmail.com>
parents: 11299
diff changeset
    36
#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(54, 8, 0)
ac423fd2b9a3 libavinteraction: Adjust version guard for av_codec_is_encoder()
Vittorio Giovara <vittorio.giovara@gmail.com>
parents: 11299
diff changeset
    37
#define av_codec_is_encoder(x)          x->encode
ac423fd2b9a3 libavinteraction: Adjust version guard for av_codec_is_encoder()
Vittorio Giovara <vittorio.giovara@gmail.com>
parents: 11299
diff changeset
    38
#endif
ac423fd2b9a3 libavinteraction: Adjust version guard for av_codec_is_encoder()
Vittorio Giovara <vittorio.giovara@gmail.com>
parents: 11299
diff changeset
    39
11298
9fcdf0969d53 Update libav API, keeping forward and backward compatibility
Vittorio Giovara <vittorio.giovara@gmail.com>
parents: 11046
diff changeset
    40
#if LIBAVCODEC_VERSION_MAJOR < 55
9fcdf0969d53 Update libav API, keeping forward and backward compatibility
Vittorio Giovara <vittorio.giovara@gmail.com>
parents: 11046
diff changeset
    41
#define AVCodecID                       CodecID
9fcdf0969d53 Update libav API, keeping forward and backward compatibility
Vittorio Giovara <vittorio.giovara@gmail.com>
parents: 11046
diff changeset
    42
#endif
9fcdf0969d53 Update libav API, keeping forward and backward compatibility
Vittorio Giovara <vittorio.giovara@gmail.com>
parents: 11046
diff changeset
    43
9fcdf0969d53 Update libav API, keeping forward and backward compatibility
Vittorio Giovara <vittorio.giovara@gmail.com>
parents: 11046
diff changeset
    44
#if LIBAVFORMAT_VERSION_MAJOR < 54
9fcdf0969d53 Update libav API, keeping forward and backward compatibility
Vittorio Giovara <vittorio.giovara@gmail.com>
parents: 11046
diff changeset
    45
#define avformat_find_stream_info(x, y) av_find_stream_info(x)
9fcdf0969d53 Update libav API, keeping forward and backward compatibility
Vittorio Giovara <vittorio.giovara@gmail.com>
parents: 11046
diff changeset
    46
#define avformat_close_input(x)         av_close_input_file(*(x))
9fcdf0969d53 Update libav API, keeping forward and backward compatibility
Vittorio Giovara <vittorio.giovara@gmail.com>
parents: 11046
diff changeset
    47
#endif
9fcdf0969d53 Update libav API, keeping forward and backward compatibility
Vittorio Giovara <vittorio.giovara@gmail.com>
parents: 11046
diff changeset
    48
9fcdf0969d53 Update libav API, keeping forward and backward compatibility
Vittorio Giovara <vittorio.giovara@gmail.com>
parents: 11046
diff changeset
    49
#if LIBAVUTIL_VERSION_MAJOR < 54
9fcdf0969d53 Update libav API, keeping forward and backward compatibility
Vittorio Giovara <vittorio.giovara@gmail.com>
parents: 11046
diff changeset
    50
#define AVPixelFormat                   PixelFormat
9fcdf0969d53 Update libav API, keeping forward and backward compatibility
Vittorio Giovara <vittorio.giovara@gmail.com>
parents: 11046
diff changeset
    51
#define AV_PIX_FMT_YUV420P              PIX_FMT_YUV420P
9429
7a97a554ac80 libavinteraction: fix typo and and compiling with modern libav
koda
parents: 9107
diff changeset
    52
#endif
7a97a554ac80 libavinteraction: fix typo and and compiling with modern libav
koda
parents: 9107
diff changeset
    53
7897
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    54
struct Codec
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    55
{
11298
9fcdf0969d53 Update libav API, keeping forward and backward compatibility
Vittorio Giovara <vittorio.giovara@gmail.com>
parents: 11046
diff changeset
    56
    AVCodecID id;
7897
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    57
    bool isAudio;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    58
    QString shortName; // used for identification
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    59
    QString longName; // used for displaying to user
14635
957db6db1a49 Clean up code a bit in LibavInteraction
Wuzzy <Wuzzy2@mail.ru>
parents: 13291
diff changeset
    60
    bool isRecommended;
7897
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    61
};
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    62
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    63
struct Format
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    64
{
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    65
    QString shortName;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    66
    QString longName;
14635
957db6db1a49 Clean up code a bit in LibavInteraction
Wuzzy <Wuzzy2@mail.ru>
parents: 13291
diff changeset
    67
    bool isRecommended;
7897
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    68
    QString extension;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    69
    QVector<Codec*> codecs;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    70
};
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    71
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    72
QList<Codec> codecs;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    73
QMap<QString,Format> formats;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    74
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    75
// test if given format supports given codec
11298
9fcdf0969d53 Update libav API, keeping forward and backward compatibility
Vittorio Giovara <vittorio.giovara@gmail.com>
parents: 11046
diff changeset
    76
bool FormatQueryCodec(AVOutputFormat *ofmt, enum AVCodecID codec_id)
7897
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    77
{
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    78
#if LIBAVFORMAT_VERSION_MAJOR >= 54
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    79
    return avformat_query_codec(ofmt, codec_id, FF_COMPLIANCE_NORMAL) == 1;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    80
#else
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    81
    if (ofmt->codec_tag)
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    82
        return !!av_codec_get_tag(ofmt->codec_tag, codec_id);
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    83
    return codec_id == ofmt->video_codec || codec_id == ofmt->audio_codec;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    84
#endif
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    85
}
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    86
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    87
LibavInteraction::LibavInteraction() : QObject()
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    88
{
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    89
    // initialize libav and register all codecs and formats
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    90
    av_register_all();
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    91
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    92
    // get list of all codecs
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    93
    AVCodec* pCodec = NULL;
8065
609d07b337b5 fix deprecation warnings for libav sources
koda
parents: 7897
diff changeset
    94
    while ((pCodec = av_codec_next(pCodec)))
7897
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    95
    {
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    96
        if (!av_codec_is_encoder(pCodec))
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    97
            continue;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    98
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
    99
        if (pCodec->type != AVMEDIA_TYPE_VIDEO && pCodec->type != AVMEDIA_TYPE_AUDIO)
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   100
            continue;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   101
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   102
        // this encoders seems to be buggy
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   103
        if (strcmp(pCodec->name, "rv10") == 0 || strcmp(pCodec->name, "rv20") == 0)
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   104
            continue;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   105
14636
92ebe33c5eb6 VideoRec: Hide libaom-av1 codec in frontend, it's experimental
Wuzzy <Wuzzy2@mail.ru>
parents: 14635
diff changeset
   106
        // this encoder is experimental (as of Jan 17, 2019)
92ebe33c5eb6 VideoRec: Hide libaom-av1 codec in frontend, it's experimental
Wuzzy <Wuzzy2@mail.ru>
parents: 14635
diff changeset
   107
        if (strcmp(pCodec->name, "libaom-av1") == 0)
92ebe33c5eb6 VideoRec: Hide libaom-av1 codec in frontend, it's experimental
Wuzzy <Wuzzy2@mail.ru>
parents: 14635
diff changeset
   108
            continue;
92ebe33c5eb6 VideoRec: Hide libaom-av1 codec in frontend, it's experimental
Wuzzy <Wuzzy2@mail.ru>
parents: 14635
diff changeset
   109
7897
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   110
        // doesn't support stereo sound
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   111
        if (strcmp(pCodec->name, "real_144") == 0)
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   112
            continue;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   113
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   114
        if (!pCodec->long_name || strlen(pCodec->long_name) == 0)
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   115
            continue;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   116
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   117
        if (pCodec->type == AVMEDIA_TYPE_VIDEO)
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   118
        {
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   119
            if (pCodec->supported_framerates != NULL)
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   120
                continue;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   121
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   122
            // check if codec supports yuv 4:2:0 format
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   123
            if (!pCodec->pix_fmts)
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   124
                continue;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   125
            bool yuv420Supported = false;
11299
64ad779be7bf Specify the enum type for Pixel and Sample formats
Vittorio Giovara <vittorio.giovara@gmail.com>
parents: 11298
diff changeset
   126
            for (const enum AVPixelFormat* pfmt = pCodec->pix_fmts; *pfmt != -1; pfmt++)
11298
9fcdf0969d53 Update libav API, keeping forward and backward compatibility
Vittorio Giovara <vittorio.giovara@gmail.com>
parents: 11046
diff changeset
   127
                if (*pfmt == AV_PIX_FMT_YUV420P)
7897
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   128
                {
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   129
                    yuv420Supported = true;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   130
                    break;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   131
                }
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   132
            if (!yuv420Supported)
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   133
                continue;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   134
        }
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   135
        if (pCodec->type == AVMEDIA_TYPE_AUDIO)
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   136
        {
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   137
            // check if codec supports signed 16-bit format
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   138
            if (!pCodec->sample_fmts)
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   139
                continue;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   140
            bool s16Supported = false;
11299
64ad779be7bf Specify the enum type for Pixel and Sample formats
Vittorio Giovara <vittorio.giovara@gmail.com>
parents: 11298
diff changeset
   141
            for (const enum AVSampleFormat* pfmt = pCodec->sample_fmts; *pfmt != -1; pfmt++)
7897
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   142
                if (*pfmt == AV_SAMPLE_FMT_S16)
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   143
                {
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   144
                    s16Supported = true;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   145
                    break;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   146
                }
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   147
            if (!s16Supported)
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   148
                continue;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   149
        }
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   150
        // add codec to list of codecs
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   151
        codecs.push_back(Codec());
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   152
        Codec & codec = codecs.back();
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   153
        codec.id = pCodec->id;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   154
        codec.isAudio = pCodec->type == AVMEDIA_TYPE_AUDIO;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   155
        codec.shortName = pCodec->name;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   156
        codec.longName = pCodec->long_name;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   157
14635
957db6db1a49 Clean up code a bit in LibavInteraction
Wuzzy <Wuzzy2@mail.ru>
parents: 13291
diff changeset
   158
        codec.isRecommended = false;
7897
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   159
        if (strcmp(pCodec->name, "libx264") == 0)
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   160
        {
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   161
            codec.longName = "H.264/MPEG-4 Part 10 AVC (x264)";
14635
957db6db1a49 Clean up code a bit in LibavInteraction
Wuzzy <Wuzzy2@mail.ru>
parents: 13291
diff changeset
   162
            codec.isRecommended = true;
7897
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   163
        }
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   164
        else if (strcmp(pCodec->name, "libxvid") == 0)
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   165
        {
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   166
            codec.longName = "MPEG-4 Part 2 (Xvid)";
14635
957db6db1a49 Clean up code a bit in LibavInteraction
Wuzzy <Wuzzy2@mail.ru>
parents: 13291
diff changeset
   167
            codec.isRecommended = true;
7897
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   168
        }
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   169
        else if (strcmp(pCodec->name, "libmp3lame") == 0)
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   170
        {
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   171
            codec.longName = "MP3 (MPEG audio layer 3) (LAME)";
14635
957db6db1a49 Clean up code a bit in LibavInteraction
Wuzzy <Wuzzy2@mail.ru>
parents: 13291
diff changeset
   172
            codec.isRecommended = true;
7897
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   173
        }
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   174
        else
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   175
            codec.longName = pCodec->long_name;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   176
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   177
        if (strcmp(pCodec->name, "mpeg4") == 0 || strcmp(pCodec->name, "ac3_fixed") == 0)
14635
957db6db1a49 Clean up code a bit in LibavInteraction
Wuzzy <Wuzzy2@mail.ru>
parents: 13291
diff changeset
   178
            codec.isRecommended = true;
7897
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   179
    }
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   180
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   181
    // get list of all formats
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   182
    AVOutputFormat* pFormat = NULL;
8065
609d07b337b5 fix deprecation warnings for libav sources
koda
parents: 7897
diff changeset
   183
    while ((pFormat = av_oformat_next(pFormat)))
7897
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   184
    {
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   185
        if (!pFormat->extensions)
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   186
            continue;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   187
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   188
        // skip some strange formats to not confuse users
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   189
        if (strstr(pFormat->long_name, "raw"))
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   190
            continue;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   191
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   192
        Format format;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   193
        bool hasVideoCodec = false;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   194
        for (QList<Codec>::iterator codec = codecs.begin(); codec != codecs.end(); ++codec)
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   195
        {
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   196
            if (!FormatQueryCodec(pFormat, codec->id))
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   197
                continue;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   198
            format.codecs.push_back(&*codec);
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   199
            if (!codec->isAudio)
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   200
                hasVideoCodec = true;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   201
        }
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   202
        if (!hasVideoCodec)
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   203
            continue;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   204
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   205
        QString ext(pFormat->extensions);
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   206
        ext.truncate(strcspn(pFormat->extensions, ","));
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   207
        format.extension = ext;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   208
        format.shortName = pFormat->name;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   209
        format.longName = QString("%1 (*.%2)").arg(pFormat->long_name).arg(ext);
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   210
14635
957db6db1a49 Clean up code a bit in LibavInteraction
Wuzzy <Wuzzy2@mail.ru>
parents: 13291
diff changeset
   211
        format.isRecommended = strcmp(pFormat->name, "mp4") == 0 || strcmp(pFormat->name, "avi") == 0;
7897
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   212
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   213
        formats[pFormat->name] = format;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   214
    }
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   215
}
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   216
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   217
void LibavInteraction::fillFormats(QComboBox * pFormats)
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   218
{
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   219
    // first insert recomended formats
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   220
    foreach(const Format & format, formats)
14635
957db6db1a49 Clean up code a bit in LibavInteraction
Wuzzy <Wuzzy2@mail.ru>
parents: 13291
diff changeset
   221
        if (format.isRecommended)
7897
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   222
            pFormats->addItem(format.longName, format.shortName);
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   223
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   224
    // remember where to place separator between recomended and other formats
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   225
    int sep = pFormats->count();
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   226
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   227
    // insert remaining formats
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   228
    foreach(const Format & format, formats)
14635
957db6db1a49 Clean up code a bit in LibavInteraction
Wuzzy <Wuzzy2@mail.ru>
parents: 13291
diff changeset
   229
        if (!format.isRecommended)
7897
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   230
            pFormats->addItem(format.longName, format.shortName);
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   231
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   232
    // insert separator if necessary
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   233
    if (sep != 0 && sep != pFormats->count())
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   234
        pFormats->insertSeparator(sep);
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   235
}
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   236
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   237
void LibavInteraction::fillCodecs(const QString & fmt, QComboBox * pVCodecs, QComboBox * pACodecs)
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   238
{
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   239
    Format & format = formats[fmt];
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   240
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   241
    // first insert recomended codecs
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   242
    foreach(Codec * codec, format.codecs)
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   243
    {
14635
957db6db1a49 Clean up code a bit in LibavInteraction
Wuzzy <Wuzzy2@mail.ru>
parents: 13291
diff changeset
   244
        if (codec->isRecommended)
7897
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   245
        {
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   246
            if (codec->isAudio)
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   247
                pACodecs->addItem(codec->longName, codec->shortName);
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   248
            else
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   249
                pVCodecs->addItem(codec->longName, codec->shortName);
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   250
        }
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   251
    }
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   252
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   253
    // remember where to place separators between recomended and other codecs
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   254
    int vsep = pVCodecs->count();
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   255
    int asep = pACodecs->count();
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   256
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   257
    // insert remaining codecs
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   258
    foreach(Codec * codec, format.codecs)
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   259
    {
14635
957db6db1a49 Clean up code a bit in LibavInteraction
Wuzzy <Wuzzy2@mail.ru>
parents: 13291
diff changeset
   260
        if (!codec->isRecommended)
7897
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   261
        {
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   262
            if (codec->isAudio)
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   263
                pACodecs->addItem(codec->longName, codec->shortName);
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   264
            else
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   265
                pVCodecs->addItem(codec->longName, codec->shortName);
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   266
        }
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   267
    }
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   268
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   269
    // insert separators if necessary
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   270
    if (vsep != 0 && vsep != pVCodecs->count())
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   271
        pVCodecs->insertSeparator(vsep);
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   272
    if (asep != 0 && asep != pACodecs->count())
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   273
        pACodecs->insertSeparator(asep);
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   274
}
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   275
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   276
QString LibavInteraction::getExtension(const QString & format)
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   277
{
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   278
    return formats[format].extension;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   279
}
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   280
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   281
// get information abaout file (duration, resolution etc) in multiline string
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   282
QString LibavInteraction::getFileInfo(const QString & filepath)
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   283
{
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   284
    AVFormatContext* pContext = NULL;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   285
    QByteArray utf8path = filepath.toUtf8();
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   286
    if (avformat_open_input(&pContext, utf8path.data(), NULL, NULL) < 0)
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   287
        return "";
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   288
    if (avformat_find_stream_info(pContext, NULL) < 0)
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   289
        return "";
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   290
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   291
    int s = float(pContext->duration)/AV_TIME_BASE;
12244
8db93a3a29dc Use standard units and abbreviations in frontend
Wuzzy <almikes@aol.com>
parents: 11857
diff changeset
   292
    //: Duration in minutes and seconds (SI units)
8db93a3a29dc Use standard units and abbreviations in frontend
Wuzzy <almikes@aol.com>
parents: 11857
diff changeset
   293
    QString desc = tr("Duration: %1min %2s").arg(s/60).arg(s%60) + "\n";
7897
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   294
    for (int i = 0; i < (int)pContext->nb_streams; i++)
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   295
    {
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   296
        AVStream* pStream = pContext->streams[i];
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   297
        if (!pStream)
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   298
            continue;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   299
        AVCodecContext* pCodec = pContext->streams[i]->codec;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   300
        if (!pCodec)
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   301
            continue;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   302
13291
1fbf2ac1f13e Videos frontend page: Locale-aware text formatting
Wuzzy <Wuzzy2@mail.ru>
parents: 13231
diff changeset
   303
1fbf2ac1f13e Videos frontend page: Locale-aware text formatting
Wuzzy <Wuzzy2@mail.ru>
parents: 13231
diff changeset
   304
        AVCodec* pDecoder = avcodec_find_decoder(pCodec->codec_id);
1fbf2ac1f13e Videos frontend page: Locale-aware text formatting
Wuzzy <Wuzzy2@mail.ru>
parents: 13231
diff changeset
   305
        QString decoderName = pDecoder ? pDecoder->name : tr("unknown");
7897
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   306
        if (pCodec->codec_type == AVMEDIA_TYPE_VIDEO)
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   307
        {
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   308
            if (pStream->avg_frame_rate.den)
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   309
            {
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   310
                float fps = float(pStream->avg_frame_rate.num)/pStream->avg_frame_rate.den;
13291
1fbf2ac1f13e Videos frontend page: Locale-aware text formatting
Wuzzy <Wuzzy2@mail.ru>
parents: 13231
diff changeset
   311
                //: Video metadata. %1 = video width, %2 = video height, %3 = frames per second = %4 = decoder name
1fbf2ac1f13e Videos frontend page: Locale-aware text formatting
Wuzzy <Wuzzy2@mail.ru>
parents: 13231
diff changeset
   312
                desc += QString(tr("Video: %1x%2, %3 FPS, %4")).arg(pCodec->width).arg(pCodec->height).arg(QLocale().toString(fps, 'f', 2)).arg(decoderName);
1fbf2ac1f13e Videos frontend page: Locale-aware text formatting
Wuzzy <Wuzzy2@mail.ru>
parents: 13231
diff changeset
   313
            }
1fbf2ac1f13e Videos frontend page: Locale-aware text formatting
Wuzzy <Wuzzy2@mail.ru>
parents: 13231
diff changeset
   314
            else
1fbf2ac1f13e Videos frontend page: Locale-aware text formatting
Wuzzy <Wuzzy2@mail.ru>
parents: 13231
diff changeset
   315
            {
1fbf2ac1f13e Videos frontend page: Locale-aware text formatting
Wuzzy <Wuzzy2@mail.ru>
parents: 13231
diff changeset
   316
                //: Video metadata. %1 = video width, %2 = video height, %3 = decoder name
1fbf2ac1f13e Videos frontend page: Locale-aware text formatting
Wuzzy <Wuzzy2@mail.ru>
parents: 13231
diff changeset
   317
                desc += QString(tr("Video: %1x%2, %3")).arg(pCodec->width).arg(pCodec->height).arg(decoderName);
7897
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   318
            }
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   319
        }
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   320
        else if (pCodec->codec_type == AVMEDIA_TYPE_AUDIO)
13291
1fbf2ac1f13e Videos frontend page: Locale-aware text formatting
Wuzzy <Wuzzy2@mail.ru>
parents: 13231
diff changeset
   321
        {
7897
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   322
            desc += tr("Audio: ");
13291
1fbf2ac1f13e Videos frontend page: Locale-aware text formatting
Wuzzy <Wuzzy2@mail.ru>
parents: 13231
diff changeset
   323
            desc += decoderName;
1fbf2ac1f13e Videos frontend page: Locale-aware text formatting
Wuzzy <Wuzzy2@mail.ru>
parents: 13231
diff changeset
   324
        }
7897
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   325
        else
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   326
            continue;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   327
        desc += "\n";
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   328
    }
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   329
    AVDictionaryEntry* pComment = av_dict_get(pContext->metadata, "comment", NULL, 0);
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   330
    if (pComment)
13231
4028d7f85233 Make video metadata strings translatable in frontend
Wuzzy <Wuzzy2@mail.ru>
parents: 12244
diff changeset
   331
    {
4028d7f85233 Make video metadata strings translatable in frontend
Wuzzy <Wuzzy2@mail.ru>
parents: 12244
diff changeset
   332
        // Video comment. We expect a simple key value storage in a particular format
4028d7f85233 Make video metadata strings translatable in frontend
Wuzzy <Wuzzy2@mail.ru>
parents: 12244
diff changeset
   333
        // and parse it here so the key names can be localized.
4028d7f85233 Make video metadata strings translatable in frontend
Wuzzy <Wuzzy2@mail.ru>
parents: 12244
diff changeset
   334
        desc += QString("\n");
4028d7f85233 Make video metadata strings translatable in frontend
Wuzzy <Wuzzy2@mail.ru>
parents: 12244
diff changeset
   335
        QStringList strings = QString(pComment->value).split('\n');
4028d7f85233 Make video metadata strings translatable in frontend
Wuzzy <Wuzzy2@mail.ru>
parents: 12244
diff changeset
   336
        QString sPlayer, sTheme, sMap, sRecord;
4028d7f85233 Make video metadata strings translatable in frontend
Wuzzy <Wuzzy2@mail.ru>
parents: 12244
diff changeset
   337
        for(int i=0; i < strings.count(); i++)
4028d7f85233 Make video metadata strings translatable in frontend
Wuzzy <Wuzzy2@mail.ru>
parents: 12244
diff changeset
   338
        {
4028d7f85233 Make video metadata strings translatable in frontend
Wuzzy <Wuzzy2@mail.ru>
parents: 12244
diff changeset
   339
            QString s = strings.at(i);
4028d7f85233 Make video metadata strings translatable in frontend
Wuzzy <Wuzzy2@mail.ru>
parents: 12244
diff changeset
   340
            // Original key names are in English, like:
4028d7f85233 Make video metadata strings translatable in frontend
Wuzzy <Wuzzy2@mail.ru>
parents: 12244
diff changeset
   341
            //     Key: Value
4028d7f85233 Make video metadata strings translatable in frontend
Wuzzy <Wuzzy2@mail.ru>
parents: 12244
diff changeset
   342
            if (s.startsWith("Player: "))
4028d7f85233 Make video metadata strings translatable in frontend
Wuzzy <Wuzzy2@mail.ru>
parents: 12244
diff changeset
   343
                sPlayer = QString(s.mid(8));
4028d7f85233 Make video metadata strings translatable in frontend
Wuzzy <Wuzzy2@mail.ru>
parents: 12244
diff changeset
   344
            else if (s.startsWith("Theme: "))
4028d7f85233 Make video metadata strings translatable in frontend
Wuzzy <Wuzzy2@mail.ru>
parents: 12244
diff changeset
   345
                sTheme = QString(s.mid(7));
4028d7f85233 Make video metadata strings translatable in frontend
Wuzzy <Wuzzy2@mail.ru>
parents: 12244
diff changeset
   346
            else if (s.startsWith("Map: "))
4028d7f85233 Make video metadata strings translatable in frontend
Wuzzy <Wuzzy2@mail.ru>
parents: 12244
diff changeset
   347
                sMap = QString(s.mid(5));
4028d7f85233 Make video metadata strings translatable in frontend
Wuzzy <Wuzzy2@mail.ru>
parents: 12244
diff changeset
   348
            else if (s.startsWith("Record: "))
4028d7f85233 Make video metadata strings translatable in frontend
Wuzzy <Wuzzy2@mail.ru>
parents: 12244
diff changeset
   349
                sRecord = QString(s.mid(8));
4028d7f85233 Make video metadata strings translatable in frontend
Wuzzy <Wuzzy2@mail.ru>
parents: 12244
diff changeset
   350
        }
4028d7f85233 Make video metadata strings translatable in frontend
Wuzzy <Wuzzy2@mail.ru>
parents: 12244
diff changeset
   351
        if(!sPlayer.isNull())
4028d7f85233 Make video metadata strings translatable in frontend
Wuzzy <Wuzzy2@mail.ru>
parents: 12244
diff changeset
   352
            desc += QString(tr("Player: %1")).arg(sPlayer) + "\n";
4028d7f85233 Make video metadata strings translatable in frontend
Wuzzy <Wuzzy2@mail.ru>
parents: 12244
diff changeset
   353
        if(!sTheme.isNull())
4028d7f85233 Make video metadata strings translatable in frontend
Wuzzy <Wuzzy2@mail.ru>
parents: 12244
diff changeset
   354
            desc += QString(tr("Theme: %1")).arg(sTheme) + "\n";
4028d7f85233 Make video metadata strings translatable in frontend
Wuzzy <Wuzzy2@mail.ru>
parents: 12244
diff changeset
   355
        if(!sMap.isNull())
4028d7f85233 Make video metadata strings translatable in frontend
Wuzzy <Wuzzy2@mail.ru>
parents: 12244
diff changeset
   356
            desc += QString(tr("Map: %1")).arg(sMap) + "\n";
4028d7f85233 Make video metadata strings translatable in frontend
Wuzzy <Wuzzy2@mail.ru>
parents: 12244
diff changeset
   357
        if(!sRecord.isNull())
4028d7f85233 Make video metadata strings translatable in frontend
Wuzzy <Wuzzy2@mail.ru>
parents: 12244
diff changeset
   358
            //: As in ‘recording’
4028d7f85233 Make video metadata strings translatable in frontend
Wuzzy <Wuzzy2@mail.ru>
parents: 12244
diff changeset
   359
            desc += QString(tr("Record: %1")).arg(sRecord);
4028d7f85233 Make video metadata strings translatable in frontend
Wuzzy <Wuzzy2@mail.ru>
parents: 12244
diff changeset
   360
    }
7897
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   361
    avformat_close_input(&pContext);
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   362
    return desc;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   363
}
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   364
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   365
#else
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   366
LibavInteraction::LibavInteraction() : QObject()
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   367
{
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   368
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   369
}
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   370
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   371
void LibavInteraction::fillFormats(QComboBox * pFormats)
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   372
{
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   373
    Q_UNUSED(pFormats);
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   374
}
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   375
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   376
void LibavInteraction::fillCodecs(const QString & format, QComboBox * pVCodecs, QComboBox * pACodecs)
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   377
{
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   378
    Q_UNUSED(format);
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   379
    Q_UNUSED(pVCodecs);
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   380
    Q_UNUSED(pACodecs);
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   381
}
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   382
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   383
QString LibavInteraction::getExtension(const QString & format)
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   384
{
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   385
    Q_UNUSED(format);
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   386
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   387
    return QString();
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   388
}
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   389
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   390
QString LibavInteraction::getFileInfo(const QString & filepath)
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   391
{
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   392
    Q_UNUSED(filepath);
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   393
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   394
    return QString();
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   395
}
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   396
#endif
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   397
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   398
LibavInteraction & LibavInteraction::instance()
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   399
{
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   400
    static LibavInteraction instance;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   401
    return instance;
5e7c0810f365 libav name refactor
koda
parents:
diff changeset
   402
}