Filters library and unit test builds.
Added filters gyp file. Some tweaks to get the h.264 related filters library and unit tests building in the packager source tree. Change-Id: Ib79ffe307d3357b4b38f13ee87cbd93f0f93b1cc
This commit is contained in:
parent
0ad332896e
commit
5557ce7677
|
@ -0,0 +1,46 @@
|
||||||
|
# Copyright 2014 Google Inc. All rights reserved.
|
||||||
|
#
|
||||||
|
# Use of this source code is governed by a BSD-style
|
||||||
|
# license that can be found in the LICENSE filters or at
|
||||||
|
# https://developers.google.com/open-source/licenses/bsd
|
||||||
|
|
||||||
|
{
|
||||||
|
'variables': {
|
||||||
|
# Compile as chromium code to enable warnings and warnings-as-errors.
|
||||||
|
'chromium_code': 1,
|
||||||
|
},
|
||||||
|
'target_defaults': {
|
||||||
|
'include_dirs': [
|
||||||
|
'../..',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
'targets': [
|
||||||
|
{
|
||||||
|
'target_name': 'filters',
|
||||||
|
'type': '<(component)',
|
||||||
|
'sources': [
|
||||||
|
'h264_bit_reader.cc',
|
||||||
|
'h264_bit_reader.h',
|
||||||
|
'h264_parser.cc',
|
||||||
|
'h264_parser.h',
|
||||||
|
],
|
||||||
|
'dependencies': [
|
||||||
|
'../../base/base.gyp:base',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'target_name': 'filters_unittest',
|
||||||
|
'type': '<(gtest_target_type)',
|
||||||
|
'sources': [
|
||||||
|
'h264_bit_reader_unittest.cc',
|
||||||
|
'h264_parser_unittest.cc',
|
||||||
|
],
|
||||||
|
'dependencies': [
|
||||||
|
'../../testing/gtest.gyp:gtest',
|
||||||
|
'../../testing/gtest.gyp:gtest_main',
|
||||||
|
'../test/media_test.gyp:media_test_support',
|
||||||
|
'filters',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
|
@ -6,6 +6,7 @@
|
||||||
#include "media/filters/h264_bit_reader.h"
|
#include "media/filters/h264_bit_reader.h"
|
||||||
|
|
||||||
namespace media {
|
namespace media {
|
||||||
|
namespace filters {
|
||||||
|
|
||||||
H264BitReader::H264BitReader()
|
H264BitReader::H264BitReader()
|
||||||
: data_(NULL),
|
: data_(NULL),
|
||||||
|
@ -110,4 +111,5 @@ size_t H264BitReader::NumEmulationPreventionBytesRead() {
|
||||||
return emulation_prevention_bytes_;
|
return emulation_prevention_bytes_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} // namespace filters
|
||||||
} // namespace media
|
} // namespace media
|
||||||
|
|
|
@ -10,15 +10,15 @@
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#include "base/basictypes.h"
|
#include "base/basictypes.h"
|
||||||
#include "media/base/media_export.h"
|
|
||||||
|
|
||||||
namespace media {
|
namespace media {
|
||||||
|
namespace filters {
|
||||||
|
|
||||||
// A class to provide bit-granularity reading of H.264 streams.
|
// A class to provide bit-granularity reading of H.264 streams.
|
||||||
// This is not a generic bit reader class, as it takes into account
|
// This is not a generic bit reader class, as it takes into account
|
||||||
// H.264 stream-specific constraints, such as skipping emulation-prevention
|
// H.264 stream-specific constraints, such as skipping emulation-prevention
|
||||||
// bytes and stop bits. See spec for more details.
|
// bytes and stop bits. See spec for more details.
|
||||||
class MEDIA_EXPORT H264BitReader {
|
class H264BitReader {
|
||||||
public:
|
public:
|
||||||
H264BitReader();
|
H264BitReader();
|
||||||
~H264BitReader();
|
~H264BitReader();
|
||||||
|
@ -74,6 +74,7 @@ class MEDIA_EXPORT H264BitReader {
|
||||||
DISALLOW_COPY_AND_ASSIGN(H264BitReader);
|
DISALLOW_COPY_AND_ASSIGN(H264BitReader);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
} // namespace filters
|
||||||
} // namespace media
|
} // namespace media
|
||||||
|
|
||||||
#endif // MEDIA_FILTERS_H264_BIT_READER_H_
|
#endif // MEDIA_FILTERS_H264_BIT_READER_H_
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
#include "testing/gtest/include/gtest/gtest.h"
|
#include "testing/gtest/include/gtest/gtest.h"
|
||||||
|
|
||||||
namespace media {
|
namespace media {
|
||||||
|
namespace filters {
|
||||||
|
|
||||||
TEST(H264BitReaderTest, ReadStreamWithoutEscapeAndTrailingZeroBytes) {
|
TEST(H264BitReaderTest, ReadStreamWithoutEscapeAndTrailingZeroBytes) {
|
||||||
H264BitReader reader;
|
H264BitReader reader;
|
||||||
|
@ -70,4 +71,5 @@ TEST(H264BitReaderTest, StopBitOccupyFullByte) {
|
||||||
EXPECT_FALSE(reader.HasMoreRBSPData());
|
EXPECT_FALSE(reader.HasMoreRBSPData());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} // namespace filters
|
||||||
} // namespace media
|
} // namespace media
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
#include "media/filters/h264_parser.h"
|
#include "media/filters/h264_parser.h"
|
||||||
|
|
||||||
namespace media {
|
namespace media {
|
||||||
|
namespace filters {
|
||||||
|
|
||||||
bool H264SliceHeader::IsPSlice() const {
|
bool H264SliceHeader::IsPSlice() const {
|
||||||
return (slice_type % 5 == kPSlice);
|
return (slice_type % 5 == kPSlice);
|
||||||
|
@ -1261,4 +1262,5 @@ H264Parser::Result H264Parser::ParseSEI(H264SEIMessage* sei_msg) {
|
||||||
return kOk;
|
return kOk;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} // namespace filters
|
||||||
} // namespace media
|
} // namespace media
|
||||||
|
|
|
@ -12,14 +12,14 @@
|
||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
#include "base/basictypes.h"
|
#include "base/basictypes.h"
|
||||||
#include "media/base/media_export.h"
|
|
||||||
#include "media/filters/h264_bit_reader.h"
|
#include "media/filters/h264_bit_reader.h"
|
||||||
|
|
||||||
namespace media {
|
namespace media {
|
||||||
|
namespace filters {
|
||||||
|
|
||||||
// For explanations of each struct and its members, see H.264 specification
|
// For explanations of each struct and its members, see H.264 specification
|
||||||
// at http://www.itu.int/rec/T-REC-H.264.
|
// at http://www.itu.int/rec/T-REC-H.264.
|
||||||
struct MEDIA_EXPORT H264NALU {
|
struct H264NALU {
|
||||||
H264NALU();
|
H264NALU();
|
||||||
|
|
||||||
enum Type {
|
enum Type {
|
||||||
|
@ -49,7 +49,7 @@ enum {
|
||||||
kH264ScalingList8x8Length = 64,
|
kH264ScalingList8x8Length = 64,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct MEDIA_EXPORT H264SPS {
|
struct H264SPS {
|
||||||
H264SPS();
|
H264SPS();
|
||||||
|
|
||||||
int profile_idc;
|
int profile_idc;
|
||||||
|
@ -104,7 +104,7 @@ struct MEDIA_EXPORT H264SPS {
|
||||||
int chroma_array_type;
|
int chroma_array_type;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct MEDIA_EXPORT H264PPS {
|
struct H264PPS {
|
||||||
H264PPS();
|
H264PPS();
|
||||||
|
|
||||||
int pic_parameter_set_id;
|
int pic_parameter_set_id;
|
||||||
|
@ -132,7 +132,7 @@ struct MEDIA_EXPORT H264PPS {
|
||||||
int second_chroma_qp_index_offset;
|
int second_chroma_qp_index_offset;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct MEDIA_EXPORT H264ModificationOfPicNum {
|
struct H264ModificationOfPicNum {
|
||||||
int modification_of_pic_nums_idc;
|
int modification_of_pic_nums_idc;
|
||||||
union {
|
union {
|
||||||
int abs_diff_pic_num_minus1;
|
int abs_diff_pic_num_minus1;
|
||||||
|
@ -140,7 +140,7 @@ struct MEDIA_EXPORT H264ModificationOfPicNum {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
struct MEDIA_EXPORT H264WeightingFactors {
|
struct H264WeightingFactors {
|
||||||
bool luma_weight_flag;
|
bool luma_weight_flag;
|
||||||
bool chroma_weight_flag;
|
bool chroma_weight_flag;
|
||||||
int luma_weight[32];
|
int luma_weight[32];
|
||||||
|
@ -149,7 +149,7 @@ struct MEDIA_EXPORT H264WeightingFactors {
|
||||||
int chroma_offset[32][2];
|
int chroma_offset[32][2];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct MEDIA_EXPORT H264DecRefPicMarking {
|
struct H264DecRefPicMarking {
|
||||||
int memory_mgmnt_control_operation;
|
int memory_mgmnt_control_operation;
|
||||||
int difference_of_pic_nums_minus1;
|
int difference_of_pic_nums_minus1;
|
||||||
int long_term_pic_num;
|
int long_term_pic_num;
|
||||||
|
@ -157,7 +157,7 @@ struct MEDIA_EXPORT H264DecRefPicMarking {
|
||||||
int max_long_term_frame_idx_plus1;
|
int max_long_term_frame_idx_plus1;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct MEDIA_EXPORT H264SliceHeader {
|
struct H264SliceHeader {
|
||||||
H264SliceHeader();
|
H264SliceHeader();
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
|
@ -240,7 +240,7 @@ struct H264SEIRecoveryPoint {
|
||||||
int changing_slice_group_idc;
|
int changing_slice_group_idc;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct MEDIA_EXPORT H264SEIMessage {
|
struct H264SEIMessage {
|
||||||
H264SEIMessage();
|
H264SEIMessage();
|
||||||
|
|
||||||
enum Type {
|
enum Type {
|
||||||
|
@ -258,7 +258,7 @@ struct MEDIA_EXPORT H264SEIMessage {
|
||||||
|
|
||||||
// Class to parse an Annex-B H.264 stream,
|
// Class to parse an Annex-B H.264 stream,
|
||||||
// as specified in chapters 7 and Annex B of the H.264 spec.
|
// as specified in chapters 7 and Annex B of the H.264 spec.
|
||||||
class MEDIA_EXPORT H264Parser {
|
class H264Parser {
|
||||||
public:
|
public:
|
||||||
enum Result {
|
enum Result {
|
||||||
kOk,
|
kOk,
|
||||||
|
@ -394,6 +394,7 @@ class MEDIA_EXPORT H264Parser {
|
||||||
DISALLOW_COPY_AND_ASSIGN(H264Parser);
|
DISALLOW_COPY_AND_ASSIGN(H264Parser);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
} // namespace filters
|
||||||
} // namespace media
|
} // namespace media
|
||||||
|
|
||||||
#endif // MEDIA_FILTERS_H264_PARSER_H_
|
#endif // MEDIA_FILTERS_H264_PARSER_H_
|
||||||
|
|
|
@ -7,11 +7,12 @@
|
||||||
#include "base/logging.h"
|
#include "base/logging.h"
|
||||||
#include "base/path_service.h"
|
#include "base/path_service.h"
|
||||||
#include "base/strings/string_number_conversions.h"
|
#include "base/strings/string_number_conversions.h"
|
||||||
#include "media/base/test_data_util.h"
|
#include "media/test/test_data_util.h"
|
||||||
#include "media/filters/h264_parser.h"
|
#include "media/filters/h264_parser.h"
|
||||||
#include "testing/gtest/include/gtest/gtest.h"
|
#include "testing/gtest/include/gtest/gtest.h"
|
||||||
|
|
||||||
namespace media {
|
namespace media {
|
||||||
|
namespace filters {
|
||||||
|
|
||||||
TEST(H264ParserTest, StreamFileParsing) {
|
TEST(H264ParserTest, StreamFileParsing) {
|
||||||
base::FilePath file_path = GetTestDataFilePath("test-25fps.h264");
|
base::FilePath file_path = GetTestDataFilePath("test-25fps.h264");
|
||||||
|
@ -28,8 +29,8 @@ TEST(H264ParserTest, StreamFileParsing) {
|
||||||
// Parse until the end of stream/unsupported stream/error in stream is found.
|
// Parse until the end of stream/unsupported stream/error in stream is found.
|
||||||
int num_parsed_nalus = 0;
|
int num_parsed_nalus = 0;
|
||||||
while (true) {
|
while (true) {
|
||||||
media::H264SliceHeader shdr;
|
H264SliceHeader shdr;
|
||||||
media::H264SEIMessage sei_msg;
|
H264SEIMessage sei_msg;
|
||||||
H264NALU nalu;
|
H264NALU nalu;
|
||||||
H264Parser::Result res = parser.AdvanceToNextNALU(&nalu);
|
H264Parser::Result res = parser.AdvanceToNextNALU(&nalu);
|
||||||
if (res == H264Parser::kEOStream) {
|
if (res == H264Parser::kEOStream) {
|
||||||
|
@ -69,4 +70,5 @@ TEST(H264ParserTest, StreamFileParsing) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} // namespace filters
|
||||||
} // namespace media
|
} // namespace media
|
||||||
|
|
|
@ -56,3 +56,10 @@ bear.mjpeg -- created using "avconv -i bear.ogv -f mjpeg bear.mjpeg".
|
||||||
bear.mpeg -- created using "avconv -i bear.ogv -f mpeg bear.mpeg".
|
bear.mpeg -- created using "avconv -i bear.ogv -f mpeg bear.mpeg".
|
||||||
bear.rm -- created using "avconv -i bear.ogv -f rm -b 192k bear.rm".
|
bear.rm -- created using "avconv -i bear.ogv -f rm -b 192k bear.rm".
|
||||||
bear.swf -- created using "avconv -i bear.ogv -f swf -an bear.swf".
|
bear.swf -- created using "avconv -i bear.ogv -f swf -an bear.swf".
|
||||||
|
|
||||||
|
// VDA test files: test-25fps
|
||||||
|
test-25fps.h264:
|
||||||
|
Using ffmpeg SVN-r0.5.9-4:0.5.9-0ubuntu0.10.04.1 @ WebKit r122718, generated
|
||||||
|
with:
|
||||||
|
ffmpeg -i third_party/WebKit/LayoutTests/media/content/test-25fps.mp4 \
|
||||||
|
-vcodec copy -vbsf h264_mp4toannexb -an test-25fps.h264
|
||||||
|
|
Binary file not shown.
|
@ -75,6 +75,7 @@
|
||||||
'media/base/media_base.gyp:media_base_unittest',
|
'media/base/media_base.gyp:media_base_unittest',
|
||||||
'media/event/media_event.gyp:media_event_unittest',
|
'media/event/media_event.gyp:media_event_unittest',
|
||||||
'media/file/file.gyp:file_unittest',
|
'media/file/file.gyp:file_unittest',
|
||||||
|
'media/filters/filters.gyp:filters_unittest',
|
||||||
'media/formats/mp4/mp4.gyp:mp4_unittest',
|
'media/formats/mp4/mp4.gyp:mp4_unittest',
|
||||||
'mpd/mpd.gyp:mpd_unittest',
|
'mpd/mpd.gyp:mpd_unittest',
|
||||||
'packager_test',
|
'packager_test',
|
||||||
|
|
Loading…
Reference in New Issue