summaryrefslogtreecommitdiffstats
path: root/chromium/media/base/media_file_checker.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/media/base/media_file_checker.cc')
-rw-r--r--chromium/media/base/media_file_checker.cc20
1 files changed, 9 insertions, 11 deletions
diff --git a/chromium/media/base/media_file_checker.cc b/chromium/media/base/media_file_checker.cc
index 494657d209f..4a49ac7c6a2 100644
--- a/chromium/media/base/media_file_checker.cc
+++ b/chromium/media/base/media_file_checker.cc
@@ -21,20 +21,17 @@ static void OnError(bool* called) {
*called = false;
}
-MediaFileChecker::MediaFileChecker(const base::PlatformFile& file)
- : file_(file),
- file_closer_(&file_) {
+MediaFileChecker::MediaFileChecker(base::File file) : file_(file.Pass()) {
}
MediaFileChecker::~MediaFileChecker() {
}
bool MediaFileChecker::Start(base::TimeDelta check_time) {
- media::FileDataSource source;
+ media::FileDataSource source(file_.Pass());
bool read_ok = true;
media::BlockingUrlProtocol protocol(&source, base::Bind(&OnError, &read_ok));
media::FFmpegGlue glue(&protocol);
- source.InitializeFromPlatformFile(file_);
AVFormatContext* format_context = glue.format_context();
if (!glue.OpenContext())
@@ -59,11 +56,10 @@ bool MediaFileChecker::Start(base::TimeDelta check_time) {
return false;
AVPacket packet;
- scoped_ptr_malloc<AVFrame, media::ScopedPtrAVFreeFrame> frame(
- av_frame_alloc());
+ scoped_ptr<AVFrame, media::ScopedPtrAVFreeFrame> frame(av_frame_alloc());
int result = 0;
- base::Time deadline = base::Time::Now() +
+ const base::TimeTicks deadline = base::TimeTicks::Now() +
std::min(check_time,
base::TimeDelta::FromSeconds(kMaxCheckTimeInSeconds));
do {
@@ -88,21 +84,23 @@ bool MediaFileChecker::Start(base::TimeDelta check_time) {
// decoded; otherwise av_free_packet() will corrupt memory.
AVPacket temp_packet = packet;
do {
- avcodec_get_frame_defaults(frame.get());
result = avcodec_decode_audio4(av_context, frame.get(), &frame_decoded,
&temp_packet);
if (result < 0)
break;
+ av_frame_unref(frame.get());
temp_packet.size -= result;
temp_packet.data += result;
+ frame_decoded = 0;
} while (temp_packet.size > 0);
} else if (av_context->codec_type == AVMEDIA_TYPE_VIDEO) {
- avcodec_get_frame_defaults(frame.get());
result = avcodec_decode_video2(av_context, frame.get(), &frame_decoded,
&packet);
+ if (result >= 0 && frame_decoded)
+ av_frame_unref(frame.get());
}
av_free_packet(&packet);
- } while (base::Time::Now() < deadline && read_ok && result >= 0);
+ } while (base::TimeTicks::Now() < deadline && read_ok && result >= 0);
return read_ok && (result == AVERROR_EOF || result >= 0);
}