mirror of
https://github.com/tuxbox-neutrino/libstb-hal.git
synced 2025-08-26 23:13:16 +02:00
libeplayer3: cleanup AVFormatContext propagation to writers
This commit is contained in:
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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 : "";
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user