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; std::string title;
int pid; int pid;
AVFormatContext *avfc;
AVStream *stream; AVStream *stream;
bool inactive; bool inactive;
bool is_static; bool is_static;
int ac3flags; int ac3flags;
int type, mag, page; // for teletext 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 class Manager

View File

@@ -74,7 +74,7 @@ class Output
bool GetFrameCount(int64_t &framecount); bool GetFrameCount(int64_t &framecount);
bool SwitchAudio(AVStream *stream); bool SwitchAudio(AVStream *stream);
bool SwitchVideo(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 #endif

View File

@@ -47,6 +47,6 @@ class Writer
static Writer *GetWriter(enum AVCodecID id, enum AVMediaType codec_type); static Writer *GetWriter(enum AVCodecID id, enum AVMediaType codec_type);
virtual void Init(void) { } 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 #endif

View File

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

View File

@@ -331,16 +331,16 @@ bool Output::SwitchVideo(AVStream *stream)
return true; 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) { switch (stream->codec->codec_type) {
case AVMEDIA_TYPE_VIDEO: { case AVMEDIA_TYPE_VIDEO: {
OpenThreads::ScopedLock<OpenThreads::Mutex> v_lock(videoMutex); 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: { case AVMEDIA_TYPE_AUDIO: {
OpenThreads::ScopedLock<OpenThreads::Mutex> a_lock(audioMutex); 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: default:
return false; return false;

View File

@@ -35,11 +35,11 @@
class WriterAC3 : public Writer class WriterAC3 : public Writer
{ {
public: 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(); 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) if (fd < 0 || !packet || !packet->data)
return false; return false;

View File

@@ -38,7 +38,7 @@ class WriterDIVX : public Writer
private: private:
bool initialHeader; bool initialHeader;
public: 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(); void Init();
WriterDIVX(); WriterDIVX();
}; };
@@ -48,7 +48,7 @@ void WriterDIVX::Init()
initialHeader = true; 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) if (fd < 0 || !packet || !packet->data)
return false; return false;

View File

@@ -36,11 +36,11 @@
class WriterDTS : public Writer class WriterDTS : public Writer
{ {
public: 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(); 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) if (fd < 0 || !packet || !packet->data)
return false; return false;

View File

@@ -32,11 +32,11 @@
class WriterH263 : public Writer class WriterH263 : public Writer
{ {
public: 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(); 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) if (fd < 0 || !packet || !packet->data)
return false; return false;

View File

@@ -53,7 +53,7 @@ class WriterH264 : public Writer
bool initialHeader; bool initialHeader;
unsigned int NalLengthBytes; unsigned int NalLengthBytes;
public: 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(); void Init();
WriterH264(); WriterH264();
}; };
@@ -64,7 +64,7 @@ void WriterH264::Init(void)
NalLengthBytes = 1; 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) if (fd < 0 || !packet || !packet->data)
return false; return false;

View File

@@ -35,11 +35,11 @@
class WriterMP3 : public Writer class WriterMP3 : public Writer
{ {
public: 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(); 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) if (fd < 0 || !packet || !packet->data)
return false; return false;

View File

@@ -35,11 +35,11 @@
class WriterMPEG2 : public Writer class WriterMPEG2 : public Writer
{ {
public: 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(); 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) if (fd < 0 || !packet || !packet->data)
return false; return false;

View File

@@ -80,7 +80,7 @@ class WriterPCM : public Writer
bool restart_audio_resampling; bool restart_audio_resampling;
public: 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 prepareClipPlay();
bool writePCM(int fd, int64_t Pts, uint8_t *data, unsigned int size); bool writePCM(int fd, int64_t Pts, uint8_t *data, unsigned int size);
void Init(); void Init();
@@ -225,7 +225,7 @@ void WriterPCM::Init()
restart_audio_resampling = true; 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) if (fd < 0)
return false; return false;

View File

@@ -51,7 +51,7 @@ class WriterVC1 : public Writer
bool initialHeader; bool initialHeader;
uint8_t FrameHeaderSeen; uint8_t FrameHeaderSeen;
public: 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(); void Init();
WriterVC1(); WriterVC1();
}; };
@@ -61,7 +61,7 @@ void WriterVC1::Init()
initialHeader = true; 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) if (fd < 0 || !packet || !packet->data)
return false; return false;

View File

@@ -58,7 +58,7 @@ class WriterWMV : public Writer
private: private:
bool initialHeader; bool initialHeader;
public: 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(); void Init();
WriterWMV(); WriterWMV();
}; };
@@ -68,7 +68,7 @@ void WriterWMV::Init()
initialHeader = true; 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) if (fd < 0 || !packet || !packet->data)
return false; return false;

View File

@@ -58,7 +58,7 @@ void Writer::Register(Writer *w, enum AVCodecID id, audio_encoding_t encoding)
aencoding[id] = 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; return false;
} }