title: MediaCodec Fails To Dequeue Output on S9+
body: <p>I have an Android plugin for Unity3D that decodes h264 video into a surface. This works on my S6 with Android 5.1.1. However, on my S9 running Android 8, output buffers are never dequeued.</p>
  
  <p>My code for creating the decoder is straightforward:</p>
  
  <pre><code>codec = AMediaCodec_createDecoderByType ("video/avc");
  AMediaFormat * format = AMediaFormat_new ();
  AMediaFormat_setString (format, AMEDIAFORMAT_KEY_MIME, "video/avc");
  AMediaFormat_setInt32 (format, AMEDIAFORMAT_KEY_WIDTH, 4096);
  AMediaFormat_setInt32 (format, AMEDIAFORMAT_KEY_HEIGHT, 1536);
  AMediaFormat_setInt32 (format, AMEDIAFORMAT_KEY_FRAME_RATE, 30);
  AMediaCodec_configure (codec, format, window, NULL, 0);
  AMediaCodec_start (codec);
  AMediaFormat_delete (format);
  </code></pre>
  
  <p>Similarly, my code for queueing into the codec is relatively standard</p>
  
  <pre><code>ssize_t buffIdx = AMediaCodec_dequeueInputBuffer (codec, DequeueTimeoutUS);
  if (buffIdx &lt; 0)
      continue;
  uint8_t* inputBuff = AMediaCodec_getInputBuffer (codec, buffIdx, &amp;buffsize);
  // I would copy into the input buffer here...
  AMediaCodec_queueInputBuffer (codec, buffIdx, 0, copySize, pts, flags);
  </code></pre>
  
  <p>And my code for pulling from the decoder:</p>
  
  <pre><code>AMediaCodecBufferInfo info;
  ssize_t status = AMediaCodec_dequeueOutputBuffer (codec, &amp;info, DequeueOutputTimeout);
  if (status == AMEDIACODEC_INFO_TRY_AGAIN_LATER)
      continue;
  // I would update the surface texture here...
  AMediaCodec_releaseOutputBuffer (codec, status, info.size != 0);
  </code></pre>
  
  <p>Unfortunately, dequeueing only returns AMEDIACODEC_INFO_TRY_AGAIN_LATER. Here are the logs from it running on the S9+</p>
  
  <pre><code> 02-14 15:00:50.346  8005  8158 I ACodec  :  [] Now uninitialized
   02-14 15:00:50.347  8005  8160 I ACodec  : [] onAllocateComponent
   02-14 15:00:50.353  8005  8160 I OMXClient: Treble IOmx obtained
   02-14 15:00:50.353  8005  8160 I ACodec  : Set Google AAC Dec for aacProfile 0
   02-14 15:00:50.357  2692  7767 I OMXMaster: makeComponentInstance(OMX.qcom.video.decoder.avc) in omx@1.0-service process
   02-14 15:00:50.359   684   684 I android.hardware.wifi@1.0-service: getLinkLayerStats
   02-14 15:00:50.365  2692  7767 E         : Service not available yet
   02-14 15:00:50.388  2692  7767 I OMX-VDEC-1080P: Video slvp perflock acquired
   02-14 15:00:50.389  2692  7767 I OMX-VDEC-1080P: component_init: OMX.qcom.video.decoder.avc : fd=22
   02-14 15:00:50.389  2692  7767 E OMX-VDEC-1080P: Unsupported output color format for c2d (2141391876)
   02-14 15:00:50.389  2692  7767 E OMX-VDEC-1080P: Setting color format failed
   02-14 15:00:50.396  2692  7767 I OMX-VDEC-1080P: omx_vdec::component_init() success : fd=22
   02-14 15:00:50.397  8005  8160 I ACodec  : [OMX.qcom.video.decoder.avc] Now Loaded
   02-14 15:00:51.818  8005  8159 D SurfaceUtils: connecting to surface 0xc4b86808, reason connectToSurface
   02-14 15:00:51.818  8005  8159 I MediaCodec: [OMX.qcom.video.decoder.avc] setting surface generation to 8197121
   02-14 15:00:51.818  8005  8159 D SurfaceUtils: disconnecting from surface 0xc4b86808, reason connectToSurface(reconnect)
   02-14 15:00:51.818  8005  8159 D SurfaceUtils: connecting to surface 0xc4b86808, reason connectToSurface(reconnect)
   02-14 15:00:51.819  2687 32660 I ResourceManagerService: ResourceManagerService checkCodecCapacity pid 8005 clientId 3218327712 useExtended 0
   02-14 15:00:51.820  8005  8160 I ACodec  : [HW_HDR] HDR-OFF 0
   02-14 15:00:51.820  8005  8160 W DirectStreamingProxy: app-pid not found. use getpid(). pid = 8005
   02-14 15:00:51.821  8005  8160 D DirectStreamingProxy: pid = 8005
   02-14 15:00:51.823  2692  7767 E OMX-VDEC-1080P: Enable/Disable allocate-native-handle allowed only on input port!
   02-14 15:00:51.823  2692  7767 E OMX-VDEC-1080P: set_parameter: Error: 0x80001019, setting param 0x7f00005d
   02-14 15:00:51.823  2692  7767 E OMXNodeInstance: setParameter(0xee709444:qcom.decoder.avc, OMX.google.android.index.allocateNativeHandle(0x7f00005d): Output:1 en=0) ERROR: UnsupportedSetting(0x80001019)
   02-14 15:00:51.823  2692  7767 E OMX-VDEC-1080P: Extension: OMX.google.android.index.storeANWBufferInMetadata not implemented
   02-14 15:00:51.824  8005  8160 I ACodec  : [OMX.qcom.video.decoder.avc] OMX_QCOM_FramePacking_OnlyOneCompleteFrame is setting
   02-14 15:00:51.824  2676  3409 V APM_AudioPolicyManager:   getOutputForDevice() returns output 29
   02-14 15:00:51.824  2692  7767 E OMX-VDEC-1080P: Extension: OMX.google.android.index.storeANWBufferInMetadata not implemented
   02-14 15:00:51.824  2692  7767 E OMX-VDEC-1080P: Extension: OMX.google.android.index.configureVideoTunnelMode not implemented
   02-14 15:00:51.824  2692  7767 E OMX-VDEC-1080P: Extension: OMX.google.android.index.useAndroidNativeBuffer is supported
   02-14 15:00:51.824  2692  7767 E OMX-VDEC-1080P: Setparameter: unknown param 2130706434
   02-14 15:00:51.824  2692  7767 E OMX-VDEC-1080P: set_parameter: Error: 0x8000101a, setting param 0x7f000002
   02-14 15:00:51.824  2692  7767 E OMXNodeInstance: setParameter(0xee709444:qcom.decoder.avc, ??(0x7f000002)) ERROR: UnsupportedIndex(0x8000101a)
   02-14 15:00:51.824  8005  8160 W ACodec  : Fail to set FramePackingMode(-1010)
   02-14 15:00:51.824  2676  3409 I AudioFlinger: add dynamic flag, can move to deep thread, session 601
   02-14 15:00:51.824  8005  8160 I ExtendedACodec: setupVideoDecoder()
   02-14 15:00:51.828  8005  8160 I ExtendedACodec: Decoder will be in frame by frame mode
   02-14 15:00:51.828  2692  2845 E OMX-VDEC-1080P: Setparameter: unknown param 2130706434
   02-14 15:00:51.828  2692  2845 E OMX-VDEC-1080P: set_parameter: Error: 0x8000101a, setting param 0x7f000002
   02-14 15:00:51.828  2692  2845 E OMXNodeInstance: setParameter(0xee709444:qcom.decoder.avc, ??(0x7f000002)) ERROR: UnsupportedIndex(0x8000101a)
   02-14 15:00:51.828  8005  8160 W ExtendedACodec: Failed to set frame packing format on component
   02-14 15:00:51.828  8005  8160 I SmartFittingClass: Create SmartFitting Version 2.0
   02-14 15:00:51.830  2689  2887 I RemoteDisplayService: There is no RemoteDisplay
   02-14 15:00:51.831  8005  8160 I SmartFittingClass: Init, [State:UNINITIALIZED] pid: 8005
   02-14 15:00:51.832  3051  3365 D CodecSolution: setSmartFittingPid : 8005
   02-14 15:00:51.833  3051  3365 D CodecSolution: setSmartFittingMode : 0
   02-14 15:00:51.833  3051  3434 D CodecSolution: handleMessage : 202
   02-14 15:00:51.836  2692  7768 E OMX-VDEC-1080P: Does not handle dataspace request
   02-14 15:00:51.836  2692  7768 E OMXNodeInstance: getConfig(0xee709444:qcom.decoder.avc, ??(0x7f000062)) ERROR: UnsupportedSetting(0x80001019)
   02-14 15:00:51.845  8005  8160 I ACodec  : [OMX.qcom.video.decoder.avc] Now Loaded-&gt;Idle
   02-14 15:00:51.858  2692  2900 E OMX-VDEC-1080P: Extension: OMX.google.android.index.AndroidNativeBufferConsumerUsage not implemented
   02-14 15:00:51.858  8005  8160 D SurfaceUtils: set up nativeWindow 0xc4b86808 for 4096x1536, color 0x7fa30c06, rotation 0, usage 0x20402900
   02-14 15:00:51.859  8005  8160 I ACodec  : [OMX.qcom.video.decoder.avc] configureOutputBuffersFromNativeWindow setBufferCount :17, minUndequeuedBuffers : 5
   02-14 15:00:51.860  3051  3365 W CodecSolution: PackageInfo is null.
   02-14 15:00:51.860  8005  8175 I SmartFittingClass: InitialCheck, WhiteListStatus returned from CodecSolution : 0
   02-14 15:00:51.860  8005  8175 I SmartFittingClass: InitialCheck, 
   02-14 15:00:51.864  3051  3365 D CodecSolution: reportMediaStatisticsEvent: action=1@1986621044;category=2@1986621044;label=1936222260@1986621044
   02-14 15:00:51.864  3051  3365 D MediaStatisticsEvent: MediaStatisticsEvent: action=1@1986621044;category=2@1986621044;label=1936222260@1986621044
   02-14 15:00:51.864  3051  3365 D MediaStatisticsEvent: Category.valueOf: 2
   02-14 15:00:51.864  3051  3365 D MediaStatisticsEvent: Action.valueOf: 1
   02-14 15:00:51.864  3051  3365 D MediaStatisticsEvent: Label.valueOf: 0x73686834
   02-14 15:00:51.864  3051  3365 D MediaStatisticsEvent: category: VDEC
   02-14 15:00:51.864  3051  3365 D MediaStatisticsEvent: action: INSTANTIATE
   02-14 15:00:51.864  3051  3365 D MediaStatisticsEvent: label: SEC_HW_H264
   02-14 15:00:51.865  3051  3434 D CodecSolution: handleMessage : 900
   02-14 15:00:51.865  3051  3434 D CodecSolution: event : VDEC
   02-14 15:00:51.865  3051  3434 D Logging : appId: com.samsung.android.codecsolution, feature: VDEC, extra: SEC_HW_H264, value: -1
   02-14 15:00:51.865  2687  1137 I ResourceManagerService: addMediaInfo -(PID : 8005, clientID : 3218327712)
   02-14 15:00:51.865  2687  1137 I ResourceManagerService: MediaInfo add 6291456 (width 4096 height 1536) remained 11403264
   02-14 15:00:51.865  2687  1137 I ResourceManagerService: getMediaResourceInfo resourceType : 2, size : 1
   02-14 15:00:51.865  2687  1137 I ResourceManagerService: getMediaResourceInfo (PID : 8005, clientID : 3218327712, non-secure-codec/video-codec:1, 4096x1536(fps:30) - SoftCodec : No, Encorder : No)
   02-14 15:00:51.865  3051  3365 V ResourceManagerHelper-JNI: JNIMediaResourceHelper::notify eventType : 1, ext1 : 0, ext2 : 0
   02-14 15:00:51.865  3051  3365 V ResourceManagerHelper-JNI: notify eventType : 1, ext1 : 0, ext2 : 0
   02-14 15:00:51.865  8005  8160 I ACodec  : [OMX.qcom.video.decoder.avc] Now Idle-&gt;Executing
   02-14 15:00:51.866  3051  3365 I SemMediaResourceHelper: makeMediaResourceInfo mOwnResourceEventExcluded : false, mPid : 3051
   02-14 15:00:51.866  3051  3365 I SemMediaResourceHelper: [1] makeMediaResourceInfo resourceType : 2 isSecured : false, pid : 8005, client id : 3218327712
  02-14 15:00:51.866  8005  8160 I ACodec  : [OMX.qcom.video.decoder.avc] Now Executing
  02-14 15:00:51.870  8005  8160 W GrallocMapperPassthrough: buffer descriptor with invalid usage bits 0x2000
  </code></pre>
  
  <p>The last line about invalid usage bits repeats roughly in-step with me queueing the input buffers</p>