crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Не могу разобраться в исходнике, на wxWidgets
RazrFalcon
  опции профиля:
сообщение 11.2.2011, 23:53
Сообщение #1


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Раскрывающийся текст
#include <wx/filename.h>
extern "C" {
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
}
#include "include/aegisub/aegisub.h"


class LAVCFile {
private:
    unsigned refs;

    LAVCFile(Aegisub::String filename);
    ~LAVCFile();

    class Initializer {
    public:
        Initializer();
    };
    static Initializer init;

public:
    AVFormatContext *fctx;
    
    static LAVCFile *Create(Aegisub::String filename) { return new LAVCFile(filename); }
    LAVCFile *AddRef() { refs++; return this; };
    void Release() { if (!--refs) delete this; };
};
Раскрывающийся текст
#include <wx/wxprec.h>
#include "lavc_file.h"
#include <vector>

struct LAVCFrameInfo {
    int64_t DTS;
    bool isKeyFrame;
    LAVCFrameInfo(int64_t ADTS, bool isAKeyFrame) : DTS(ADTS), isKeyFrame(isAKeyFrame) {};
};

typedef std::vector<LAVCFrameInfo> LAVCFrameInfoVector;

class LAVCKeyFrames {
    private:
        LAVCFile* file;                    // Video file
        AVStream* stream;                // Used stream
        int streamN;                    // Stream index
        int numFrames;                    // number of frames in the video
    protected:
        LAVCFrameInfoVector framesData;
    public:
        LAVCKeyFrames(const Aegisub::String filename);
        ~LAVCKeyFrames();
        wxArrayInt GetKeyFrames();
        int GetNumFrames();
        LAVCFrameInfoVector GetFrameData();
};
Раскрывающийся текст
LAVCKeyFrames::LAVCKeyFrames(const Aegisub::String filename) 
: file(0), stream(0), streamN(-1), numFrames(0) {
    // Open LAVCFile
    file = LAVCFile::Create(filename);

    // Find video stream
    for (unsigned int i = 0; i < file->fctx->nb_streams; ++i) {
        if (file->fctx->streams[i]->codec->codec_type == CODEC_TYPE_VIDEO) {
            stream = file->fctx->streams[i];
            streamN = i;
            break;
        }
    }
    if (streamN == -1) throw _T("ffmpeg keyframes reader: Could not find a video stream");

}


Это нужные куски из исходников aegisub.
Мне нужно получить номера ключевых кадров.
Суть в том что я не понимаю как они к файлу прикрутили, то есть
file->fctx->streams[i]->codec->codec_type
Сначала это была строчка с именем файла, а затем уже у него появились и AVFormatContext *fctx.
Не пойму как это можно переписать на QT, с wxWidgets не сталкивался.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Iron Bug
  опции профиля:
сообщение 12.2.2011, 12:03
Сообщение #2


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


wxWidgets тут ни при чём вообще. смотри, как реализован класс AVFormatContext - и всё.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.3.2024, 9:41