libeplayer3: cleanup AVFormatContext propagation to writers

This commit is contained in:
martii
2014-05-01 10:15:14 +02:00
parent eebb7d6b39
commit e2e5582c64
16 changed files with 32 additions and 37 deletions

View File

@@ -44,13 +44,12 @@ struct Track
{
std::string title;
int pid;
AVFormatContext *avfc;
AVStream *stream;
bool inactive;
bool is_static;
int ac3flags;
int type, mag, page; // for teletext
Track() : pid(-1), avfc(NULL), stream(NULL), inactive(0), is_static(0), ac3flags(0) {}
Track() : pid(-1), stream(NULL), inactive(0), is_static(0), ac3flags(0) {}
};
class Manager

View File

@@ -74,7 +74,7 @@ class Output
bool GetFrameCount(int64_t &framecount);
bool SwitchAudio(AVStream *stream);
bool SwitchVideo(AVStream *stream);
bool Write(AVFormatContext *avfc, AVStream *stream, AVPacket *packet, int64_t Pts);
bool Write(AVStream *stream, AVPacket *packet, int64_t Pts);
};
#endif

View File

@@ -47,6 +47,6 @@ class Writer
static Writer *GetWriter(enum AVCodecID id, enum AVMediaType codec_type);
virtual void Init(void) { }
virtual bool Write(int fd, AVFormatContext *avfc, AVStream *stream, AVPacket *packet, int64_t pts);
virtual bool Write(int fd, AVStream *stream, AVPacket *packet, int64_t pts);
};
#endif

View File

@@ -149,7 +149,7 @@ bool Input::Play()
seek_target = INT64_MIN;
restart_audio_resampling = true;
// flush streams
// clear streams
unsigned int i;
for (i = 0; i < avfc->nb_streams; i++)
if (avfc->streams[i]->codec && avfc->streams[i]->codec->codec)
@@ -179,7 +179,7 @@ bool Input::Play()
if (_videoTrack && (_videoTrack->stream == stream)) {
int64_t pts = calcPts(stream, packet.pts);
if (!player->output.Write(avfc, stream, &packet, pts)) {
if (!player->output.Write(stream, &packet, pts)) {
if (warnVideoWrite)
warnVideoWrite--;
else {
@@ -190,11 +190,11 @@ bool Input::Play()
} else if (_audioTrack && (_audioTrack->stream == stream)) {
if (restart_audio_resampling) {
restart_audio_resampling = false;
player->output.Write(avfc, stream, NULL, 0);
player->output.Write(stream, NULL, 0);
}
if (!player->isBackWard) {
int64_t pts = calcPts(stream, packet.pts);
if (!player->output.Write(avfc, stream, &packet, _videoTrack ? pts : 0)) {
if (!player->output.Write(stream, &packet, _videoTrack ? pts : 0)) {
if (warnAudioWrite)
warnAudioWrite--;
else {
@@ -246,7 +246,7 @@ bool Input::Play()
AVPacket packet;
packet.data = NULL;
packet.size = 0;
player->output.Write(avfc, _audioTrack->stream, &packet, 0);
player->output.Write(_audioTrack->stream, &packet, 0);
}
player->output.Flush();
}
@@ -314,9 +314,6 @@ bool Input::ReadSubtitle(const char *filename, const char *format, int pid)
AVPacket packet;
av_init_packet(&packet);
if (c->subtitle_header)
fprintf(stderr, "%s\n", c->subtitle_header);
while (av_read_frame(subavfc, &packet) > -1) {
AVSubtitle sub;
memset(&sub, 0, sizeof(sub));
@@ -441,7 +438,6 @@ bool Input::UpdateTracks()
stream->id = n + 1;
Track track;
track.avfc = avfc;
track.stream = stream;
AVDictionaryEntry *lang = av_dict_get(stream->metadata, "language", NULL, 0);
track.title = lang ? lang->value : "";

View File

@@ -331,16 +331,16 @@ bool Output::SwitchVideo(AVStream *stream)
return true;
}
bool Output::Write(AVFormatContext *avfc, AVStream *stream, AVPacket *packet, int64_t pts)
bool Output::Write(AVStream *stream, AVPacket *packet, int64_t pts)
{
switch (stream->codec->codec_type) {
case AVMEDIA_TYPE_VIDEO: {
OpenThreads::ScopedLock<OpenThreads::Mutex> v_lock(videoMutex);
return videofd > -1 && videoWriter && videoWriter->Write(videofd, avfc, stream, packet, pts);
return videofd > -1 && videoWriter && videoWriter->Write(videofd, stream, packet, pts);
}
case AVMEDIA_TYPE_AUDIO: {
OpenThreads::ScopedLock<OpenThreads::Mutex> a_lock(audioMutex);
return audiofd > -1 && audioWriter && audioWriter->Write(audiofd, avfc, stream, packet, pts);
return audiofd > -1 && audioWriter && audioWriter->Write(audiofd, stream, packet, pts);
}
default:
return false;

View File

@@ -35,11 +35,11 @@
class WriterAC3 : public Writer
{
public:
bool Write(int fd, AVFormatContext *avfc, AVStream *stream, AVPacket *packet, int64_t pts);
bool Write(int fd, AVStream *stream, AVPacket *packet, int64_t pts);
WriterAC3();
};
bool WriterAC3::Write(int fd, AVFormatContext * /* avfc */, AVStream * /* stream */, AVPacket *packet, int64_t pts)
bool WriterAC3::Write(int fd, AVStream * /* stream */, AVPacket *packet, int64_t pts)
{
if (fd < 0 || !packet || !packet->data)
return false;

View File

@@ -38,7 +38,7 @@ class WriterDIVX : public Writer
private:
bool initialHeader;
public:
bool Write(int fd, AVFormatContext *avfc, AVStream *stream, AVPacket *packet, int64_t pts);
bool Write(int fd, AVStream *stream, AVPacket *packet, int64_t pts);
void Init();
WriterDIVX();
};
@@ -48,7 +48,7 @@ void WriterDIVX::Init()
initialHeader = true;
}
bool WriterDIVX::Write(int fd, AVFormatContext * /* avfc */, AVStream *stream, AVPacket *packet, int64_t pts)
bool WriterDIVX::Write(int fd, AVStream *stream, AVPacket *packet, int64_t pts)
{
if (fd < 0 || !packet || !packet->data)
return false;

View File

@@ -36,11 +36,11 @@
class WriterDTS : public Writer
{
public:
bool Write(int fd, AVFormatContext *avfc, AVStream *stream, AVPacket *packet, int64_t pts);
bool Write(int fd, AVStream *stream, AVPacket *packet, int64_t pts);
WriterDTS();
};
bool WriterDTS::Write(int fd, AVFormatContext * /* avfc */, AVStream * /* stream */, AVPacket *packet, int64_t pts)
bool WriterDTS::Write(int fd, AVStream * /* stream */, AVPacket *packet, int64_t pts)
{
if (fd < 0 || !packet || !packet->data)
return false;

View File

@@ -32,11 +32,11 @@
class WriterH263 : public Writer
{
public:
bool Write(int fd, AVFormatContext *avfc, AVStream *stream, AVPacket *packet, int64_t pts);
bool Write(int fd, AVStream *stream, AVPacket *packet, int64_t pts);
WriterH263();
};
bool WriterH263::Write(int fd, AVFormatContext * /* avfc */, AVStream * /* stream */, AVPacket *packet, int64_t pts)
bool WriterH263::Write(int fd, AVStream * /* stream */, AVPacket *packet, int64_t pts)
{
if (fd < 0 || !packet || !packet->data)
return false;

View File

@@ -53,7 +53,7 @@ class WriterH264 : public Writer
bool initialHeader;
unsigned int NalLengthBytes;
public:
bool Write(int fd, AVFormatContext *avfc, AVStream *stream, AVPacket *packet, int64_t pts);
bool Write(int fd, AVStream *stream, AVPacket *packet, int64_t pts);
void Init();
WriterH264();
};
@@ -64,7 +64,7 @@ void WriterH264::Init(void)
NalLengthBytes = 1;
}
bool WriterH264::Write(int fd, AVFormatContext * /* avfc */, AVStream *stream, AVPacket *packet, int64_t pts)
bool WriterH264::Write(int fd, AVStream *stream, AVPacket *packet, int64_t pts)
{
if (fd < 0 || !packet || !packet->data)
return false;

View File

@@ -35,11 +35,11 @@
class WriterMP3 : public Writer
{
public:
bool Write(int fd, AVFormatContext *avfc, AVStream *stream, AVPacket *packet, int64_t pts);
bool Write(int fd, AVStream *stream, AVPacket *packet, int64_t pts);
WriterMP3();
};
bool WriterMP3::Write(int fd, AVFormatContext * /* avfc */, AVStream * /* stream */, AVPacket *packet, int64_t pts)
bool WriterMP3::Write(int fd, AVStream * /* stream */, AVPacket *packet, int64_t pts)
{
if (fd < 0 || !packet || !packet->data)
return false;

View File

@@ -35,11 +35,11 @@
class WriterMPEG2 : public Writer
{
public:
bool Write(int fd, AVFormatContext *avfc, AVStream *stream, AVPacket *packet, int64_t pts);
bool Write(int fd, AVStream *stream, AVPacket *packet, int64_t pts);
WriterMPEG2();
};
bool WriterMPEG2::Write(int fd, AVFormatContext * /* avfc */, AVStream * /* stream */, AVPacket *packet, int64_t pts)
bool WriterMPEG2::Write(int fd, AVStream * /* stream */, AVPacket *packet, int64_t pts)
{
if (fd < 0 || !packet || !packet->data)
return false;

View File

@@ -80,7 +80,7 @@ class WriterPCM : public Writer
bool restart_audio_resampling;
public:
bool Write(int fd, AVFormatContext *avfc, AVStream *stream, AVPacket *packet, int64_t pts);
bool Write(int fd, AVStream *stream, AVPacket *packet, int64_t pts);
bool prepareClipPlay();
bool writePCM(int fd, int64_t Pts, uint8_t *data, unsigned int size);
void Init();
@@ -225,7 +225,7 @@ void WriterPCM::Init()
restart_audio_resampling = true;
}
bool WriterPCM::Write(int fd, AVFormatContext * /*avfc*/, AVStream *stream, AVPacket *packet, int64_t pts)
bool WriterPCM::Write(int fd, AVStream *stream, AVPacket *packet, int64_t pts)
{
if (fd < 0)
return false;

View File

@@ -51,7 +51,7 @@ class WriterVC1 : public Writer
bool initialHeader;
uint8_t FrameHeaderSeen;
public:
bool Write(int fd, AVFormatContext *avfc, AVStream *stream, AVPacket *packet, int64_t pts);
bool Write(int fd, AVStream *stream, AVPacket *packet, int64_t pts);
void Init();
WriterVC1();
};
@@ -61,7 +61,7 @@ void WriterVC1::Init()
initialHeader = true;
}
bool WriterVC1::Write(int fd, AVFormatContext * /* avfc */, AVStream *stream, AVPacket *packet, int64_t pts)
bool WriterVC1::Write(int fd, AVStream *stream, AVPacket *packet, int64_t pts)
{
if (fd < 0 || !packet || !packet->data)
return false;

View File

@@ -58,7 +58,7 @@ class WriterWMV : public Writer
private:
bool initialHeader;
public:
bool Write(int fd, AVFormatContext *avfc, AVStream *stream, AVPacket *packet, int64_t pts);
bool Write(int fd, AVStream *stream, AVPacket *packet, int64_t pts);
void Init();
WriterWMV();
};
@@ -68,7 +68,7 @@ void WriterWMV::Init()
initialHeader = true;
}
bool WriterWMV::Write(int fd, AVFormatContext * /* avfc */, AVStream *stream, AVPacket *packet, int64_t pts)
bool WriterWMV::Write(int fd, AVStream *stream, AVPacket *packet, int64_t pts)
{
if (fd < 0 || !packet || !packet->data)
return false;

View File

@@ -58,7 +58,7 @@ void Writer::Register(Writer *w, enum AVCodecID id, audio_encoding_t encoding)
aencoding[id] = encoding;
}
bool Writer::Write(int /* fd */, AVFormatContext * /* avfc */, AVStream * /*stream*/, AVPacket * /* packet */, int64_t /* pts */)
bool Writer::Write(int /* fd */, AVStream * /*stream*/, AVPacket * /* packet */, int64_t /* pts */)
{
return false;
}