summaryrefslogtreecommitdiff
path: root/rotord/src/libavwrapper.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'rotord/src/libavwrapper.cpp')
-rw-r--r--rotord/src/libavwrapper.cpp45
1 files changed, 14 insertions, 31 deletions
diff --git a/rotord/src/libavwrapper.cpp b/rotord/src/libavwrapper.cpp
index 15a84d1..b7b5688 100644
--- a/rotord/src/libavwrapper.cpp
+++ b/rotord/src/libavwrapper.cpp
@@ -422,9 +422,9 @@ int libav::decoder::seekToFrameNew(int targetFrameIndex)
bool libav::decoder::readNextFrame(int targetFrameIndex)
{
AVPacket packet = {0};
- av_init_packet(&packet);
+ //av_init_packet(&packet); //moved insode loop 100913
bool result = readNextFrameWithPacket(targetFrameIndex, packet, pRaw);
- av_free_packet(&packet);
+ //av_free_packet(&packet); //moved insode loop 100913
return result;
}
@@ -434,7 +434,7 @@ bool libav::decoder::readNextFrameWithPacket(int targetFrameIndex, AVPacket& pac
int finished = 0;
do {
finished = 0;
- av_free_packet(&packet);
+ //av_free_packet(&packet); //moved insode loop 100913
int result;
//if (!avtry(av_read_frame( container, &packet ), "Failed to read frame"))
if (!avtry(av_read_packet( container, &packet ), "Failed to read packet"))
@@ -474,10 +474,11 @@ bool libav::decoder::readNextFrameWithPacket(int targetFrameIndex, AVPacket& pac
if (packet.size == 0) // packet.size==0 usually means EOF
break;
}
+ av_free_packet(&packet);
} while ( (!finished) || (pYuv->best_effort_timestamp < targetFrameIndex));
// } while (!finished);
- av_free_packet(&packet);
+ //av_free_packet(&packet); //moved insode loop 100913
if (format != PIX_FMT_NONE) {
sws_scale(Sctx, // sws context
@@ -1281,10 +1282,12 @@ void libav::exporter::open_video(AVFormatContext *oc, AVCodec *codec, AVStream *
pkt.stream_index = st->index;
- avcodec_free_frame(&frame);
+ //avcodec_free_frame(&frame); ///removed 091013
+
// Write the compressed frame to the media file. //
ret = av_interleaved_write_frame(oc, &pkt);
+ av_free_packet(&pkt);
if (ret != 0) {
//fprintf(stderr, "Error while writing audio frame: %s\n",
// av_err2str(ret));
@@ -1344,7 +1347,7 @@ void libav::exporter::open_video(AVFormatContext *oc, AVCodec *codec, AVStream *
exit(1);
}
//avcodec_free_frame(&frame);
- av_free_packet(pkt);
+ av_free_packet(pkt); ///added 091013
}
void libav::exporter::close_audio(AVFormatContext *oc, AVStream *st)
@@ -1411,6 +1414,7 @@ void libav::exporter::open_video(AVFormatContext *oc, AVCodec *codec, AVStream *
pkt.size = sizeof(AVPicture);
ret = av_interleaved_write_frame(oc, &pkt);
+ av_free_packet(&pkt); ///added 091013
} else {
AVPacket pkt = { 0 };
int got_packet;
@@ -1436,8 +1440,11 @@ void libav::exporter::open_video(AVFormatContext *oc, AVCodec *codec, AVStream *
} else {
ret = 0;
}
+ av_free_packet(&pkt); ///added 091013
}
+
+
if (ret != 0) {
//fprintf(stderr, "Error while writing video frame: %s\n", av_err2str(ret));
@@ -1590,31 +1597,7 @@ bool libav::audioloader::setup(const std::string &filename){
return frame;
}
- AVPacket* libav::audioloader::get_packet() {
-
- if (!ready) return nullptr;
-
- int ret=av_read_frame(formatContext, &packet);
- if (ret<0) {
- std::cerr << "finished with code "<<ret <<(ret==AVERROR_EOF?" ,EOF":"")<<std::endl;
- ready=false;
- return nullptr;
- }
- //if (packet.stream_index == audioStream->index)
- //{
- //int bytes =
- // avcodec_decode_audio4(codecContext, frame, &frameFinished, &packet);
-
- // Some frames rely on multiple packets, so we have to make sure the frame is finished before
- // we can use it
- //}
- // You *must* call av_free_packet() after each call to av_read_frame() or else you'll leak memory
- //av_free_packet(&packet);?????
- //}
- return &packet;
-
- }
- uint16_t* libav::audioloader::get_samples(int num){ //presumes 16bpc here and outputs interleaved samples
+uint16_t* libav::audioloader::get_samples(int num){ //presumes 16bpc here and outputs interleaved samples
//std::cerr << "request "<<num<<" samples: "<<(ready?"ready":"not ready")<<std::endl;
//if(!ready) return nullptr;
//shuffle down samples