summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@quicinc.com>2017-10-15 13:15:35 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2017-10-15 13:15:35 -0700
commit1270f5d1d2daf7e65c9601fe3270fd562f15b1e9 (patch)
tree203c57374296fba2a0d20c258536fd09973c28d1
parent45fbae996089da0a2d111cfa29a166b7f79e7d7f (diff)
parentf197cbf74453764bf6f0bd32b1c0b87ec2cb7502 (diff)
downloadmedia-1270f5d1d2daf7e65c9601fe3270fd562f15b1e9.tar.gz
Merge "mm-video-v4l2: vidc: Fix vp8, vp9 dumping logic."
-rw-r--r--mm-video-v4l2/vidc/common/inc/vidc_debug.h25
-rw-r--r--mm-video-v4l2/vidc/common/src/vidc_common.cpp27
-rw-r--r--mm-video-v4l2/vidc/vdec/inc/omx_vdec.h2
-rw-r--r--mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp57
-rwxr-xr-xmm-video-v4l2/vidc/venc/inc/omx_swvenc_mpeg4.h2
-rw-r--r--mm-video-v4l2/vidc/venc/inc/omx_video_base.h2
-rw-r--r--mm-video-v4l2/vidc/venc/inc/omx_video_encoder.h3
-rw-r--r--mm-video-v4l2/vidc/venc/inc/video_encoder_device_v4l2.h2
-rw-r--r--mm-video-v4l2/vidc/venc/src/omx_swvenc_mpeg4.cpp3
-rw-r--r--mm-video-v4l2/vidc/venc/src/omx_video_base.cpp3
-rw-r--r--mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp5
-rw-r--r--[-rwxr-xr-x]mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp14
12 files changed, 88 insertions, 57 deletions
diff --git a/mm-video-v4l2/vidc/common/inc/vidc_debug.h b/mm-video-v4l2/vidc/common/inc/vidc_debug.h
index 08425fd4..a220d550 100644
--- a/mm-video-v4l2/vidc/common/inc/vidc_debug.h
+++ b/mm-video-v4l2/vidc/common/inc/vidc_debug.h
@@ -200,6 +200,31 @@ public:
}
};
+struct __attribute__((packed)) IvfFileHeader {
+ uint8_t signature[4];
+ uint16_t version;
+ uint16_t size;
+ uint8_t fourCC[4];
+ uint16_t width;
+ uint16_t height;
+ uint32_t rate;
+ uint32_t scale;
+ uint32_t frameCount;
+ uint32_t unused;
+
+ IvfFileHeader();
+ IvfFileHeader(bool isVp9, int width, int height,
+ int rate, int scale, int nFrameCount);
+};
+
+struct __attribute__((packed)) IvfFrameHeader {
+ uint32_t filledLen;
+ uint64_t timeStamp;
+
+ IvfFrameHeader();
+ IvfFrameHeader(uint32_t size, uint64_t timeStamp);
+};
+
#define VIDC_TRACE_NAME_LOW(_name) AutoTracer _tracer(PRIO_TRACE_LOW, _name);
#define VIDC_TRACE_NAME_HIGH(_name) AutoTracer _tracer(PRIO_TRACE_HIGH, _name);
diff --git a/mm-video-v4l2/vidc/common/src/vidc_common.cpp b/mm-video-v4l2/vidc/common/src/vidc_common.cpp
index a13d44b4..1ea2343f 100644
--- a/mm-video-v4l2/vidc/common/src/vidc_common.cpp
+++ b/mm-video-v4l2/vidc/common/src/vidc_common.cpp
@@ -304,3 +304,30 @@ bool profile_level_converter::convert_omx_level_to_v4l2(int codec, int omx_level
return find_item(*level_map, omx_level, v4l2_level);
}
+
+IvfFileHeader:: IvfFileHeader() :
+ signature{'D','K','I','F'},
+ version(),
+ size(32),
+ fourCC{'V','P','8','0'},
+ unused()
+{
+}
+
+IvfFileHeader:: IvfFileHeader(bool isVp9, int width, int height,
+ int rate, int scale, int frameCount) :
+ IvfFileHeader() {
+ this->width = width;
+ this->height = height;
+ this->rate = rate;
+ this->scale = scale;
+ this->frameCount = frameCount;
+ fourCC[2] = isVp9 ? '9' : '8';
+}
+
+IvfFrameHeader:: IvfFrameHeader(): filledLen(), timeStamp() {}
+
+IvfFrameHeader:: IvfFrameHeader(uint32_t filledLen, uint64_t timeStamp) :
+ filledLen(filledLen),
+ timeStamp(timeStamp) {
+}
diff --git a/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h b/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h
index cd51200d..6164bb11 100644
--- a/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h
+++ b/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h
@@ -1277,7 +1277,7 @@ class omx_vdec: public qc_omx_component
allocate_color_convert_buf client_buffers;
struct video_decoder_capability m_decoder_capability;
struct debug_cap m_debug;
- int log_input_buffers(const char *, int);
+ int log_input_buffers(const char *, int, uint64_t);
int log_output_buffers(OMX_BUFFERHEADERTYPE *);
int log_cc_output_buffers(OMX_BUFFERHEADERTYPE *);
void send_codec_config();
diff --git a/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp b/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp
index 032c7a83..987f8b9e 100644
--- a/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp
+++ b/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp
@@ -1933,7 +1933,7 @@ OMX_ERRORTYPE omx_vdec::is_video_session_supported()
return OMX_ErrorNone;
}
-int omx_vdec::log_input_buffers(const char *buffer_addr, int buffer_len)
+int omx_vdec::log_input_buffers(const char *buffer_addr, int buffer_len, uint64_t timeStamp)
{
if (m_debug.in_buffer_log && !m_debug.infile) {
if(!strncmp(drv_ctx.kind,"OMX.qcom.video.decoder.mpeg2", OMX_MAX_STRINGNAME_SIZE)) {
@@ -1965,55 +1965,20 @@ int omx_vdec::log_input_buffers(const char *buffer_addr, int buffer_len)
}
if (!strncmp(drv_ctx.kind, "OMX.qcom.video.decoder.vp8", OMX_MAX_STRINGNAME_SIZE) ||
!strncmp(drv_ctx.kind, "OMX.qcom.video.decoder.vp9", OMX_MAX_STRINGNAME_SIZE)) {
- struct ivf_file_header {
- OMX_U8 signature[4]; //='DKIF';
- OMX_U8 version ; //= 0;
- OMX_U8 headersize ; //= 32;
- OMX_U32 FourCC;
- OMX_U8 width;
- OMX_U8 height;
- OMX_U32 rate;
- OMX_U32 scale;
- OMX_U32 length;
- OMX_U8 unused[4];
- } file_header;
-
- memset((void *)&file_header,0,sizeof(file_header));
- file_header.signature[0] = 'D';
- file_header.signature[1] = 'K';
- file_header.signature[2] = 'I';
- file_header.signature[3] = 'F';
- file_header.version = 0;
- file_header.headersize = 32;
- switch (drv_ctx.decoder_format) {
- case VDEC_CODECTYPE_VP8:
- file_header.FourCC = 0x30385056;
- break;
- case VDEC_CODECTYPE_VP9:
- file_header.FourCC = 0x30395056;
- break;
- default:
- DEBUG_PRINT_ERROR("unsupported format for VP8/VP9");
- break;
- }
- fwrite((const char *)&file_header,
- sizeof(file_header),1,m_debug.infile);
+ bool isVp9 = drv_ctx.decoder_format == VDEC_CODECTYPE_VP9;
+ int width = drv_ctx.video_resolution.frame_width;
+ int height = drv_ctx.video_resolution.frame_height;
+ int fps = drv_ctx.frame_rate.fps_numerator;
+ IvfFileHeader ivfHeader(isVp9, width, height, 1, fps, 0);
+ fwrite((const char *)&ivfHeader,
+ sizeof(ivfHeader),1,m_debug.infile);
}
}
if (m_debug.infile && buffer_addr && buffer_len) {
if (!strncmp(drv_ctx.kind, "OMX.qcom.video.decoder.vp8", OMX_MAX_STRINGNAME_SIZE) ||
!strncmp(drv_ctx.kind, "OMX.qcom.video.decoder.vp9", OMX_MAX_STRINGNAME_SIZE)) {
- struct vpx_ivf_frame_header {
- OMX_U32 framesize;
- OMX_U32 timestamp_lo;
- OMX_U32 timestamp_hi;
- } vpx_frame_header;
- vpx_frame_header.framesize = buffer_len;
- /* Currently FW doesn't use timestamp values */
- vpx_frame_header.timestamp_lo = 0;
- vpx_frame_header.timestamp_hi = 0;
- fwrite((const char *)&vpx_frame_header,
- sizeof(vpx_frame_header),1,m_debug.infile);
+ IvfFrameHeader ivfFrameHeader(buffer_len, timeStamp);
+ fwrite(&ivfFrameHeader, sizeof(ivfFrameHeader), 1, m_debug.infile);
}
fwrite(buffer_addr, buffer_len, 1, m_debug.infile);
}
@@ -6953,7 +6918,7 @@ OMX_ERRORTYPE omx_vdec::empty_this_buffer_proxy(OMX_IN OMX_HANDLETYPE hComp,
handle_demux_data(buffer);
}
- log_input_buffers((const char *)temp_buffer->bufferaddr, temp_buffer->buffer_len);
+ log_input_buffers((const char *)temp_buffer->bufferaddr, temp_buffer->buffer_len, buffer->nTimeStamp);
if (buffer->nFlags & QOMX_VIDEO_BUFFERFLAG_EOSEQ) {
buffer->nFlags &= ~QOMX_VIDEO_BUFFERFLAG_EOSEQ;
diff --git a/mm-video-v4l2/vidc/venc/inc/omx_swvenc_mpeg4.h b/mm-video-v4l2/vidc/venc/inc/omx_swvenc_mpeg4.h
index 869c64ab..98e8c952 100755
--- a/mm-video-v4l2/vidc/venc/inc/omx_swvenc_mpeg4.h
+++ b/mm-video-v4l2/vidc/venc/inc/omx_swvenc_mpeg4.h
@@ -164,7 +164,7 @@ class omx_venc: public omx_video
bool dev_color_align(OMX_BUFFERHEADERTYPE *buffer, OMX_U32 width,
OMX_U32 height);
bool dev_get_output_log_flag();
- int dev_output_log_buffers(const char *buffer_addr, int buffer_len);
+ int dev_output_log_buffers(const char *buffer_addr, int buffer_len, uint64_t timestamp);
int dev_extradata_log_buffers(char *buffer);
bool swvenc_color_align(OMX_BUFFERHEADERTYPE *buffer, OMX_U32 width,
OMX_U32 height);
diff --git a/mm-video-v4l2/vidc/venc/inc/omx_video_base.h b/mm-video-v4l2/vidc/venc/inc/omx_video_base.h
index 121e7d20..edefb874 100644
--- a/mm-video-v4l2/vidc/venc/inc/omx_video_base.h
+++ b/mm-video-v4l2/vidc/venc/inc/omx_video_base.h
@@ -304,7 +304,7 @@ class omx_video: public qc_omx_component
virtual bool dev_color_align(OMX_BUFFERHEADERTYPE *buffer, OMX_U32 width,
OMX_U32 height) = 0;
virtual bool dev_get_output_log_flag() = 0;
- virtual int dev_output_log_buffers(const char *buffer_addr, int buffer_len) = 0;
+ virtual int dev_output_log_buffers(const char *buffer_addr, int buffer_len, uint64_t timestamp) = 0;
virtual int dev_extradata_log_buffers(char *buffer_addr) = 0;
virtual bool dev_get_hevc_profile(OMX_U32*) = 0;
OMX_ERRORTYPE component_role_enum(
diff --git a/mm-video-v4l2/vidc/venc/inc/omx_video_encoder.h b/mm-video-v4l2/vidc/venc/inc/omx_video_encoder.h
index 36f680a9..cba870d9 100644
--- a/mm-video-v4l2/vidc/venc/inc/omx_video_encoder.h
+++ b/mm-video-v4l2/vidc/venc/inc/omx_video_encoder.h
@@ -94,7 +94,8 @@ class omx_venc: public omx_video
bool dev_color_align(OMX_BUFFERHEADERTYPE *buffer, OMX_U32 width,
OMX_U32 height);
bool dev_get_output_log_flag();
- int dev_output_log_buffers(const char *buffer_addr, int buffer_len);
+ int dev_output_log_buffers(const char *buffer_addr,
+ int buffer_len, uint64_t timestamp);
int dev_extradata_log_buffers(char *buffer);
bool dev_get_hevc_profile(OMX_U32* profile);
};
diff --git a/mm-video-v4l2/vidc/venc/inc/video_encoder_device_v4l2.h b/mm-video-v4l2/vidc/venc/inc/video_encoder_device_v4l2.h
index ee1f1154..77fe31cc 100644
--- a/mm-video-v4l2/vidc/venc/inc/video_encoder_device_v4l2.h
+++ b/mm-video-v4l2/vidc/venc/inc/video_encoder_device_v4l2.h
@@ -354,7 +354,7 @@ class venc_dev
OMX_ERRORTYPE venc_set_temporal_settings(OMX_VIDEO_PARAM_ANDROID_TEMPORALLAYERINGTYPE &temporalSettings);
void venc_copy_temporal_settings(OMX_VIDEO_PARAM_ANDROID_TEMPORALLAYERINGTYPE &temporalSettings);
bool venc_get_output_log_flag();
- int venc_output_log_buffers(const char *buffer_addr, int buffer_len);
+ int venc_output_log_buffers(const char *buffer_addr, int buffer_len, uint64_t timestamp);
int venc_input_log_buffers(OMX_BUFFERHEADERTYPE *buffer, int fd, int plane_offset,
unsigned long inputformat);
int venc_extradata_log_buffers(char *buffer_addr);
diff --git a/mm-video-v4l2/vidc/venc/src/omx_swvenc_mpeg4.cpp b/mm-video-v4l2/vidc/venc/src/omx_swvenc_mpeg4.cpp
index 12911323..6a7b0c90 100644
--- a/mm-video-v4l2/vidc/venc/src/omx_swvenc_mpeg4.cpp
+++ b/mm-video-v4l2/vidc/venc/src/omx_swvenc_mpeg4.cpp
@@ -2766,8 +2766,9 @@ bool omx_venc::dev_get_output_log_flag()
RETURN(m_debug.out_buffer_log == 1);
}
-int omx_venc::dev_output_log_buffers(const char *buffer, int bufferlen)
+int omx_venc::dev_output_log_buffers(const char *buffer, int bufferlen, uint64_t ts)
{
+ (void) ts;
ENTER_FUNC();
if (m_debug.out_buffer_log && !m_debug.outfile)
diff --git a/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp b/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp
index 5eddee68..071ce9cc 100644
--- a/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp
+++ b/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp
@@ -4608,7 +4608,8 @@ OMX_ERRORTYPE omx_video::fill_buffer_done(OMX_HANDLETYPE hComp,
m_fbd_count++;
if (dev_get_output_log_flag()) {
- dev_output_log_buffers((const char*)buffer->pBuffer + buffer->nOffset, buffer->nFilledLen);
+ dev_output_log_buffers((const char*)buffer->pBuffer + buffer->nOffset, buffer->nFilledLen,
+ buffer->nTimeStamp);
}
}
if (buffer->nFlags & OMX_BUFFERFLAG_EXTRADATA) {
diff --git a/mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp b/mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp
index 89962761..6153c6ed 100644
--- a/mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp
+++ b/mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp
@@ -2498,9 +2498,10 @@ bool omx_venc::dev_get_output_log_flag()
return handle->venc_get_output_log_flag();
}
-int omx_venc::dev_output_log_buffers(const char *buffer, int bufferlen)
+int omx_venc::dev_output_log_buffers(const char *buffer,
+ int bufferlen, uint64_t timestamp)
{
- return handle->venc_output_log_buffers(buffer, bufferlen);
+ return handle->venc_output_log_buffers(buffer, bufferlen, timestamp);
}
int omx_venc::dev_extradata_log_buffers(char *buffer)
diff --git a/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp b/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp
index 1d4fdfed..d08ebc13 100755..100644
--- a/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp
+++ b/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp
@@ -1156,7 +1156,7 @@ bool venc_dev::venc_get_output_log_flag()
return (m_debug.out_buffer_log == 1);
}
-int venc_dev::venc_output_log_buffers(const char *buffer_addr, int buffer_len)
+int venc_dev::venc_output_log_buffers(const char *buffer_addr, int buffer_len, uint64_t timestamp)
{
if (venc_handle->is_secure_session()) {
DEBUG_PRINT_ERROR("logging secure output buffers is not allowed!");
@@ -1186,8 +1186,18 @@ int venc_dev::venc_output_log_buffers(const char *buffer_addr, int buffer_len)
m_debug.outfile_name[0] = '\0';
return -1;
}
+ if (m_sVenc_cfg.codectype == V4L2_PIX_FMT_VP8) {
+ int fps = m_sVenc_cfg.fps_num / m_sVenc_cfg.fps_den;
+ IvfFileHeader ivfFileHeader(false, m_sVenc_cfg.input_width,
+ m_sVenc_cfg.input_height, fps, 1, 0);
+ fwrite(&ivfFileHeader, sizeof(ivfFileHeader), 1, m_debug.outfile);
+ }
}
if (m_debug.outfile && buffer_len) {
+ if (m_sVenc_cfg.codectype == V4L2_PIX_FMT_VP8) {
+ IvfFrameHeader ivfFrameHeader(buffer_len, timestamp);
+ fwrite(&ivfFrameHeader, sizeof(ivfFrameHeader), 1, m_debug.outfile);
+ }
DEBUG_PRINT_LOW("%s buffer_len:%d", __func__, buffer_len);
fwrite(buffer_addr, buffer_len, 1, m_debug.outfile);
}
@@ -2194,7 +2204,7 @@ bool venc_dev::venc_set_param(void *paramData, OMX_INDEXTYPE index)
if (!venc_set_inloop_filter(OMX_VIDEO_AVCLoopFilterEnable))
DEBUG_PRINT_HIGH("WARN: Request for setting Inloop filter failed for HEVC encoder");
- OMX_U32 fps = m_sVenc_cfg.fps_num ? m_sVenc_cfg.fps_num / m_sVenc_cfg.fps_den : 30;
+ OMX_U32 fps = m_sVenc_cfg.fps_den ? m_sVenc_cfg.fps_num / m_sVenc_cfg.fps_den : 30;
OMX_U32 nPFrames = pParam->nKeyFrameInterval > 0 ? pParam->nKeyFrameInterval - 1 : fps - 1;
if (!venc_set_intra_period (nPFrames, 0 /* nBFrames */)) {
DEBUG_PRINT_ERROR("ERROR: Request for setting intra period failed");