| Index: media/filters/ffmpeg_demuxer.cc
|
| diff --git a/media/filters/ffmpeg_demuxer.cc b/media/filters/ffmpeg_demuxer.cc
|
| index 05fa340ad55147d5b6d0934f35ea1b73c71d665d..e23116f55fedc8d537a3ea7e69b01dc6211f5aa7 100644
|
| --- a/media/filters/ffmpeg_demuxer.cc
|
| +++ b/media/filters/ffmpeg_demuxer.cc
|
| @@ -14,6 +14,7 @@
|
| #include "base/memory/scoped_ptr.h"
|
| #include "base/message_loop/message_loop_proxy.h"
|
| #include "base/metrics/sparse_histogram.h"
|
| +#include "base/strings/string_number_conversions.h"
|
| #include "base/strings/string_util.h"
|
| #include "base/strings/stringprintf.h"
|
| #include "base/sys_byteorder.h"
|
| @@ -92,11 +93,14 @@ FFmpegDemuxerStream::FFmpegDemuxerStream(FFmpegDemuxer* demuxer,
|
| type_(UNKNOWN),
|
| end_of_stream_(false),
|
| last_packet_timestamp_(kNoTimestamp()),
|
| + video_rotation_(VIDEO_ROTATION_0),
|
| bitstream_converter_enabled_(false),
|
| fixup_negative_ogg_timestamps_(false) {
|
| DCHECK(demuxer_);
|
|
|
| bool is_encrypted = false;
|
| + int rotation = 0;
|
| + AVDictionaryEntry* rotation_entry = NULL;
|
|
|
| // Determine our media format.
|
| switch (stream->codec->codec_type) {
|
| @@ -109,6 +113,28 @@ FFmpegDemuxerStream::FFmpegDemuxerStream(FFmpegDemuxer* demuxer,
|
| type_ = VIDEO;
|
| AVStreamToVideoDecoderConfig(stream, &video_config_, true);
|
| is_encrypted = video_config_.is_encrypted();
|
| +
|
| + rotation_entry = av_dict_get(stream->metadata, "rotate", NULL, 0);
|
| + if (rotation_entry && rotation_entry->value && rotation_entry->value[0])
|
| + base::StringToInt(rotation_entry->value, &rotation);
|
| +
|
| + switch (rotation) {
|
| + case 0:
|
| + break;
|
| + case 90:
|
| + video_rotation_ = VIDEO_ROTATION_90;
|
| + break;
|
| + case 180:
|
| + video_rotation_ = VIDEO_ROTATION_180;
|
| + break;
|
| + case 270:
|
| + video_rotation_ = VIDEO_ROTATION_270;
|
| + break;
|
| + default:
|
| + LOG(ERROR) << "Unsupported video rotation metadata: " << rotation;
|
| + break;
|
| + }
|
| +
|
| break;
|
| case AVMEDIA_TYPE_SUBTITLE:
|
| type_ = TEXT;
|
| @@ -380,6 +406,10 @@ VideoDecoderConfig FFmpegDemuxerStream::video_decoder_config() {
|
| return video_config_;
|
| }
|
|
|
| +VideoRotation FFmpegDemuxerStream::video_rotation() {
|
| + return video_rotation_;
|
| +}
|
| +
|
| FFmpegDemuxerStream::~FFmpegDemuxerStream() {
|
| DCHECK(!demuxer_);
|
| DCHECK(read_cb_.is_null());
|
|
|