summaryrefslogtreecommitdiffstats
path: root/media/ffmpeg
diff options
context:
space:
mode:
authorjrummell@chromium.org <jrummell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-09 18:05:06 +0000
committerjrummell@chromium.org <jrummell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-09 18:05:06 +0000
commitee4e69a70b0e5cb9e9b0bae8fbde7839a7d990d7 (patch)
treeb9303b92174af4d5bd07f9129f70362a1069e852 /media/ffmpeg
parentb69cc1d03f372fba1882ab52916ff4aec02d2bbe (diff)
downloadchromium_src-ee4e69a70b0e5cb9e9b0bae8fbde7839a7d990d7.zip
chromium_src-ee4e69a70b0e5cb9e9b0bae8fbde7839a7d990d7.tar.gz
chromium_src-ee4e69a70b0e5cb9e9b0bae8fbde7839a7d990d7.tar.bz2
Enable partial playback
Currently Chrome supports partial playback of unsupported content. However it only works for codecs Chrome doesn't know about. This CL fixes the case where Chrome knows about the codec but does not support it on a particular platform. BUG = 127881 Review URL: https://chromiumcodereview.appspot.com/14997005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@199244 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/ffmpeg')
-rw-r--r--media/ffmpeg/ffmpeg_common.cc23
-rw-r--r--media/ffmpeg/ffmpeg_common.h12
2 files changed, 18 insertions, 17 deletions
diff --git a/media/ffmpeg/ffmpeg_common.cc b/media/ffmpeg/ffmpeg_common.cc
index e47b8f3..51b4fa9 100644
--- a/media/ffmpeg/ffmpeg_common.cc
+++ b/media/ffmpeg/ffmpeg_common.cc
@@ -57,7 +57,8 @@ int64 ConvertToTimeBase(const AVRational& time_base,
return av_rescale_q(timestamp.InMicroseconds(), kMicrosBase, time_base);
}
-AudioCodec CodecIDToAudioCodec(AVCodecID codec_id) {
+// Converts an FFmpeg audio codec ID into its corresponding supported codec id.
+static AudioCodec CodecIDToAudioCodec(AVCodecID codec_id) {
switch (codec_id) {
case AV_CODEC_ID_AAC:
return kCodecAAC;
@@ -137,7 +138,8 @@ static AVCodecID AudioCodecToCodecID(AudioCodec audio_codec,
return AV_CODEC_ID_NONE;
}
-VideoCodec CodecIDToVideoCodec(AVCodecID codec_id) {
+// Converts an FFmpeg video codec ID into its corresponding supported codec id.
+static VideoCodec CodecIDToVideoCodec(AVCodecID codec_id) {
switch (codec_id) {
case AV_CODEC_ID_H264:
return kCodecH264;
@@ -264,7 +266,8 @@ static AVSampleFormat SampleFormatToAVSampleFormat(SampleFormat sample_format) {
static void AVCodecContextToAudioDecoderConfig(
const AVCodecContext* codec_context,
bool is_encrypted,
- AudioDecoderConfig* config) {
+ AudioDecoderConfig* config,
+ bool record_stats) {
DCHECK_EQ(codec_context->codec_type, AVMEDIA_TYPE_AUDIO);
AudioCodec codec = CodecIDToAudioCodec(codec_context->codec_id);
@@ -288,7 +291,7 @@ static void AVCodecContextToAudioDecoderConfig(
codec_context->extradata,
codec_context->extradata_size,
is_encrypted,
- true);
+ record_stats);
if (codec != kCodecOpus) {
DCHECK_EQ(av_get_bytes_per_sample(codec_context->sample_fmt) * 8,
config->bits_per_channel());
@@ -297,13 +300,14 @@ static void AVCodecContextToAudioDecoderConfig(
void AVStreamToAudioDecoderConfig(
const AVStream* stream,
- AudioDecoderConfig* config) {
+ AudioDecoderConfig* config,
+ bool record_stats) {
bool is_encrypted = false;
AVDictionaryEntry* key = av_dict_get(stream->metadata, "enc_key_id", NULL, 0);
if (key)
is_encrypted = true;
- return AVCodecContextToAudioDecoderConfig(stream->codec,
- is_encrypted, config);
+ return AVCodecContextToAudioDecoderConfig(
+ stream->codec, is_encrypted, config, record_stats);
}
void AudioDecoderConfigToAVCodecContext(const AudioDecoderConfig& config,
@@ -336,7 +340,8 @@ void AudioDecoderConfigToAVCodecContext(const AudioDecoderConfig& config,
void AVStreamToVideoDecoderConfig(
const AVStream* stream,
- VideoDecoderConfig* config) {
+ VideoDecoderConfig* config,
+ bool record_stats) {
gfx::Size coded_size(stream->codec->coded_width, stream->codec->coded_height);
// TODO(vrk): This assumes decoded frame data starts at (0, 0), which is true
@@ -386,7 +391,7 @@ void AVStreamToVideoDecoderConfig(
coded_size, visible_rect, natural_size,
stream->codec->extradata, stream->codec->extradata_size,
is_encrypted,
- true);
+ record_stats);
}
void VideoDecoderConfigToAVCodecContext(
diff --git a/media/ffmpeg/ffmpeg_common.h b/media/ffmpeg/ffmpeg_common.h
index 6cb7862..cc5955c 100644
--- a/media/ffmpeg/ffmpeg_common.h
+++ b/media/ffmpeg/ffmpeg_common.h
@@ -74,14 +74,16 @@ MEDIA_EXPORT int64 ConvertToTimeBase(const AVRational& time_base,
void AVStreamToAudioDecoderConfig(
const AVStream* stream,
- AudioDecoderConfig* config);
+ AudioDecoderConfig* config,
+ bool record_stats);
void AudioDecoderConfigToAVCodecContext(
const AudioDecoderConfig& config,
AVCodecContext* codec_context);
void AVStreamToVideoDecoderConfig(
const AVStream* stream,
- VideoDecoderConfig* config);
+ VideoDecoderConfig* config,
+ bool record_stats);
void VideoDecoderConfigToAVCodecContext(
const VideoDecoderConfig& config,
AVCodecContext* codec_context);
@@ -98,12 +100,6 @@ VideoFrame::Format PixelFormatToVideoFormat(PixelFormat pixel_format);
// Converts video formats to its corresponding FFmpeg's pixel formats.
PixelFormat VideoFormatToPixelFormat(VideoFrame::Format video_format);
-// Converts an FFmpeg video codec ID into its corresponding supported codec id.
-VideoCodec CodecIDToVideoCodec(AVCodecID codec_id);
-
-// Converts an FFmpeg audio codec ID into its corresponding supported codec id.
-AudioCodec CodecIDToAudioCodec(AVCodecID codec_id);
-
} // namespace media
#endif // MEDIA_FFMPEG_FFMPEG_COMMON_H_