Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(740)

Unified Diff: media/filters/ffmpeg_h264_to_annex_b_bitstream_converter.cc

Issue 264743016: Change H264AnnexBBitstreamConverter to use AVCDecoderConfigurationRecord. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Address CR comments. Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/filters/ffmpeg_demuxer.cc ('k') | media/filters/h264_to_annex_b_bitstream_converter.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/filters/ffmpeg_h264_to_annex_b_bitstream_converter.cc
diff --git a/media/filters/ffmpeg_h264_to_annex_b_bitstream_converter.cc b/media/filters/ffmpeg_h264_to_annex_b_bitstream_converter.cc
index 31f03f5646d43fd7ca6c0cf5ab7245ffbc3ab68e..e957b4e521ce8c4599351c00e62da059c117e203 100644
--- a/media/filters/ffmpeg_h264_to_annex_b_bitstream_converter.cc
+++ b/media/filters/ffmpeg_h264_to_annex_b_bitstream_converter.cc
@@ -6,6 +6,7 @@
#include "base/logging.h"
#include "media/ffmpeg/ffmpeg_common.h"
+#include "media/formats/mp4/box_definitions.h"
namespace media {
@@ -22,40 +23,38 @@ bool FFmpegH264ToAnnexBBitstreamConverter::ConvertPacket(AVPacket* packet) {
uint32 output_packet_size = 0;
uint32 configuration_size = 0;
uint32 io_size = 0;
- if (packet == NULL) {
+ scoped_ptr<mp4::AVCDecoderConfigurationRecord> avc_config;
+
+ if (packet == NULL || !packet->data)
return false;
- }
// Calculate the needed output buffer size.
if (!configuration_processed_) {
- // FFmpeg's AVCodecContext's extradata field contains the Decoder
- // Specific Information from MP4 headers that contain the H.264 SPS and
- // PPS members. See ISO/IEC 14496-15 Chapter 5.2.4
- // AVCDecoderConfigurationRecord for exact specification.
- // Extradata must be at least 7 bytes long.
- if (stream_context_->extradata == NULL ||
- stream_context_->extradata_size <= 7) {
- return false; // Can't go on with conversion without configuration.
- }
- configuration_size += converter_.ParseConfigurationAndCalculateSize(
+ if (!stream_context_->extradata || stream_context_->extradata_size <= 0)
+ return false;
+
+ avc_config.reset(new mp4::AVCDecoderConfigurationRecord());
+
+ configuration_size = converter_.ParseConfigurationAndCalculateSize(
stream_context_->extradata,
- stream_context_->extradata_size);
- if (configuration_size == 0) {
+ stream_context_->extradata_size,
+ avc_config.get());
+ if (configuration_size == 0)
return false; // Not possible to parse the configuration.
- }
}
+
uint32 output_nal_size =
converter_.CalculateNeededOutputBufferSize(packet->data, packet->size);
- if (output_nal_size == 0) {
+ if (output_nal_size == 0)
return false; // Invalid input packet.
- }
+
output_packet_size = configuration_size + output_nal_size;
// Allocate new packet for the output.
AVPacket dest_packet;
- if (av_new_packet(&dest_packet, output_packet_size) != 0) {
+ if (av_new_packet(&dest_packet, output_packet_size) != 0)
return false; // Memory allocation failure.
- }
+
// This is a bit tricky: since the interface does not allow us to replace
// the pointer of the old packet with a new one, we will initially copy the
// metadata from old packet to new bigger packet.
@@ -70,7 +69,7 @@ bool FFmpegH264ToAnnexBBitstreamConverter::ConvertPacket(AVPacket* packet) {
// Process the configuration if not done earlier.
if (!configuration_processed_) {
if (!converter_.ConvertAVCDecoderConfigToByteStream(
- stream_context_->extradata, stream_context_->extradata_size,
+ *avc_config,
dest_packet.data, &configuration_size)) {
return false; // Failed to convert the buffer.
}
@@ -94,4 +93,3 @@ bool FFmpegH264ToAnnexBBitstreamConverter::ConvertPacket(AVPacket* packet) {
}
} // namespace media
-
« no previous file with comments | « media/filters/ffmpeg_demuxer.cc ('k') | media/filters/h264_to_annex_b_bitstream_converter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698